版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章JSP与Servlet技术主要内容12.1JSP简介12.2JSP页面元素12.3JSP内置对象12.4Servlet12.5ServletAPI接口12.6开发Servlet12.1JSP概念Java服务器页面(JavaServerPage,JSP)以扩展名.jsp保存在JavaServerPage里面使用Java编程语言和基础类库HTML用于表示页面,而Java代码用于访问动态内容,并有效控制动态内容的生成JSP概念简单jsp页面举例:<%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%><html><head><title>avceit</title></head><bodybgcolor="#ffffff"><%java.util.Datenow=newjava.util.Date();out.println("当前时间是:"+now);%><h1>你好,这就是一个JSP页面</h1></body></html>JSP执行过程TomcatJSP执行过程Jsp容器管理jsp页面生命周期,分为两个阶段:转换阶段和执行阶段转换阶段当有一个对jsp页面的请求到来时,jsp容器检查jsp页面的语法是否正确,将jsp页面转换为Servlet源文件,然后调用javac命令编译Servlet源文件生成字节码文件.执行阶段Servlet容器加载转换后的Servlet类主要内容12.1JSP简介12.2JSP页面元素12.3JSP内置对象12.4Servlet12.5ServletAPI接口12.6开发Servlet12.2JSP页面元素静态内容指令表达式Scriptlet<%Java代码%><%=Java表达式%>HTML静态文本以“<%@”开始,以“%>”结束。比如:<%@includefile="
Filename"%>声明动作<%!函数或方法%>以“<jsp:动作名”开始,以“</jsp:动作名>”结束比如:<jsp:includepage="Filename"/>注释<!--这是注释,但客户端可以查看到--><%--这也是注释,但客户端不能查看到--%>脚本元素包含三个部分:声明,脚本段,表达式声明:用于声明在其它脚本元素中可以使用的变量和方法脚本段:是一段java代码表达式:java语言中完整的表达式声明声明以<%!开始,以%>结束 <%!inti=0;%> <%! publicvoidmethod(){ } %>利用<%!%>声明的变量,在jsp容器将jsp转换为servlet时将作为servlet类的属性,声明的方法将成为servlet的方法脚本段在请求处理期间要执行的java代码段<% if(){}else{}%>在脚本段中可以声明变量,并且在后面的脚本中可以使用该变量。容器转换jsp页面为servlet的时候,一次性被转换为_jspService()方法中的代码表达式<%=表达式%>计算表达式的值插入到当前流中<%=newjava.util.Date().toLocaleString()%>例:计数器<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%><html><head></head>
<body>
<%!
inti=0;%><%i++;%><p>您是第<%=i%>个访问本站的客户<br></body></html>注意和以下代码的区别:<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%><html><head></head><body>
<%
inti=0;%><%++i;%><p>您是第<%=i%>个访问本站的客户<br></body></html>分析:1、这两个代码唯一的区别是声明变量i的方式不同,前者是成员变量,后者是局部变量。2、这个计数器有计数漏洞,有可能出现计数不同步的可能,原因是可能会有若干人同时访问i的值,这样大家获取的是同一个i值,与事实不符。解决的办法是synchronized加锁。声明方法举例<%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%><html><head></head>
<body><%--声明一个方法countpeople()--%><%!
intnumber=0;
synchronized
voidcountPeople(){number++;}%><%--调用countPeople()计算人数--%><%countPeople();%><p>您是第<%=number%>个访问本站的客户</body></html>JSP指令元素<%@pagecontentType="text/html;charset=GBK"language="java"import="java.util.Calendar"%><%!StringgetHello(Stringname){return"Hi,"+name+"!";}%><%Calendarnow=Calendar.getInstance();%>JSPScriptletJSP指令page指令page指令作用于整个jsp页面,定义了许多与页面相关的属性,这些属性将规定和jsp容器通信时的约定。
语法:<%@pageattr1=“value”%attr2=“value”%>属性值总是用单引号或双引号括起来。如果一个属性有多个值的时候,这些值用逗号分开。例如:
<@pageimport=“java.util.*”,”java.io.*”%>page指令属性属性默认值说明languagejavaimport默认不引入包import=”java.io.*,java.util.*”sessiontrue制定一个Http会话中这个页面是否参与bufferBuffer=”64K”客户输出流缓冲模式autoFlashtrueinfo关于jsp页面的信息isErrorPagefalseerrorPage定义该页面出现异常时调用的页面isThreadSafetruecontentType“text/html”;charset=iso8859-1pageEncodingpageEncoding=”ISO-8859-1”Include指令该指令的作用是将JSP页面出现该指令的位置处静态的插入一个文件。其语法为:<%@includefile=“文件”%>例:<body><%@includefile="test.txt"%></body>JSP动作元素JSP中一共制定了7种标准的“动作元素”,分别是:<jsp:include><jsp:forward><jsp:plugin><jsp:param><jsp:useBean><jsp:getProperty><jsp:setProperty><jsp:include>动作
include动作标签格式为: <jsp:includepage=“文件的名字”/> <jsp:includepage=“文件的名字”><jsp:paramname=“”value=“”> </jsp:include>Include动作标签的功能:告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。JSP页面元素<html><head><title>JSP页面构成</title></head><!--这是注释,但客户端可以察看到--><%--这也是注释,但客户端不能察看到--%><body><h1align="center">JSP页面构成</h1><%=getHello("朋友")%><%if(now.get(Calendar.AM_PM)==Calendar.AM){%>早上好!<%}else{%>下午好!<%}%><br><br><jsp:includeflush="false"page="welcome.jsp"><jsp:paramname="str"value="参数"/></jsp:include></body></html><jsp:forward>动作forward指令格式: <jsp:forwardpage=“要转向的页面”/><jsp:forwardpage=“要转向的页面”><jsp:paramname=“”value=“”/> </jsp:forward>forward指令功能:
从该指令处停止当前页面的继续执行,而转向其他的一个jsp页面。JSPexample1<html>
<head><title>demo1.jsp</title></head>
<body>
<%
if(choice.equals("manage")){
%>
<jsp:forwardpage="demo1.1.jsp">
<jsp:paramname="username"
value="<%=username%>"/>
<jsp:paramname="password"value="<%=password%>"/>
</jsp:forward>
<%}%>
</body>
</html>
JSPexample2-文件访问<%@pagecontentType="text/html;charset=GB2312"%><%@pagelanguage="java"%><%@pageimport="java.io.*"%><HTML><HEAD><TITLE>取得目录中的文件</TITLE></HEAD><BODY><CENTER><FONTSIZE=5COLOR=blue>取得目录中的文件</FONT></CENTER><BR><HR><BR></BODY></HTML><%//取得目前目录的磁盘目录Stringpath=request.getRealPath("/");Filed=newFile(path);Filelist[]=d.listFiles();%>在<Fontcolor=red><%=path%></Font>目录下的文件有<BR><Fontcolor=blue><ul><%for(inti=0;i<list.length;i++){%><li><%=list[i].getName()%><BR><%}%></ul></Font>主要内容12.1JSP简介12.2JSP页面元素12.3JSP内置对象12.4Servlet12.5ServletAPI接口12.6开发Servlet12.3JSP内置对象九种内置对象request,response,out,session,application,cookie,config,page,exception。HttpServletRequest类的Request对象该对象封装了用户提交的信息,通过调用该对象的方法可以获取用户提交的信息。getParameter(StringstrTextName)获取表单提交的信息。getRermoteAddr()获取客户的IP地址。getProtocol()获取客户使用的协议。
JSP内置对象HttpServletResponse类的Respone对象对客户的请求做出动态的响应,向客户端发送数据。(1)将客户重新引导至另一个页面使用response的sendRedirect(URL)方法实现客户的重定向。例如:response.sendRedirect("index.jsp");(2)动态响应contentType属性使用response对象的setContentType(Strings)方法来改变contentType的属性值。格式:response.setContentType(Strings);
参数s可取text/html,application/x-msexcel,application/msword等HttpSession类的session对象从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。publicStringgetId():获取Session对象编号;publicvoidsetAttribute(Stringkey,Objectobj):将参数Object指定的对象obj添加到Session对象中,并为添加的对象指定一个索引关键字。publicObjectgetAttribute(Stringkey):获取Session对象中含有关键字的对象。如:session.setAttribute(“username",“jack");JSP内置对象JSP内置对象ServletContex类的application对象服务器启动后产生了Application对象,直到服务器关闭。与Session对象不同的时,所有客户的Application对象都是同一个,即所有客户共享这个内置的Application对象。setAttribute(Stringkey,Objectobj):getAttribute(Stringkey):JSPexample3-模拟登陆Login.jsp<%@pagecontentType="text/html;charset=GB2312"%><html><head><title>CH5-Login.jsp</title></head><body><h2>javax.servlet.http.HttpSession-session对象</h2><formaction=“Login.jsp”method="POST">LoginName:<inputtype="text"name="Name"><br>LoginPassword:<inputtype="text"name="Password"><br><inputtype="submit"value="Send"><br><form><%if(request.getParameter("Name")!=null&&request.getParameter("Password")!=null){StringName=request.getParameter("Name");StringPassword=request.getParameter("Password");if(Name.equals("mike")&&Password.equals("1234")){session.setAttribute("Login","OK");
response.sendRedirect("Member.jsp");}else{out.println("登录错误,请输入正确名称");}}%></body></html>JSPexample3-模拟登陆Member.jsp<%@pagecontentType="text/html;charset=GB2312"%><html><head><title>CH5-Member.jsp</title></head><body><h2>javax.servlet.http.HttpSession-session对象</h2><%StringLogin=(String)session.getAttribute("Login");if(Login!=null&&Login.equals("OK")){out.println("欢迎进入");}else{out.println("请先登录,谢谢");}%></body></html>主要内容12.1JSP简介12.2JSP页面元素12.3JSP内置对象12.4Servlet12.5ServletAPI接口12.6开发Servlet12.4什么是ServletServlet(java服务器小程序)是一个用Java编写的程序,此程序在服务器上运行以处理客户端请求。是按照Servlet规范编写的java类请求客户端响应Servlet运行于服务器上ServletAPIServlet的框架是由两个java包组成:javax.servlet和javax.servlet.httpjavax.servlet包中定义了所有的servlet类都必须实现的接口和类。Servlet的框架的核心是:javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口.javax.servlet.http包中定义了采用HTTP协议通信的HttpServlet类ServletAPI创建自定义ServletpublicvoiddoGet(HttpServletRequestreq,HttpServletResponseres)publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres)用户自定义的ServletGenericServletHttpServletServlet1.实现servlet接口2.继承GenericServlet类3.继承HttpServlet类,并重写doGet()或doPost()方法实现对HTTP请求信息的动态响应。(在Web程序设计中,表单数据的提交方法常用有两种:Post方法和Get方法)创建自定义Servlet有两个参数:HttpServletRequest和HttpServletResponse,这两个类实现了ServletRequest接口和ServletResponse接口ServletRequest接口中封装了客户请求信息.如客户请求方式,参数名,参数值,客户端正在使用的协议,以及发出客户请求的远程主机信息等ServletResponse接口为Servlet提供了返回响应结果的方法HelloWordServlet编写一个HelloWordServlet类Servlet的生命周期Servlet容器创建Servlet的一个实例Servlet的生命周期就是指创建Servlet实例之后其存在的时间以及何时消失生命周期的3个方法为:init()service()destroy()Servlet的生命周期生命周期的各个阶段为:实例化Servlet容器创建Servlet的实例初始化该容器调用init()方法服务如果请求Servlet,则容器调用service()方法销毁实例之前调用destroy()方法销毁不可用销毁实例并标记为垃圾收集Service方法会自动根据请求的方式,调用doGet或者doPost方法,如果Service方法被重写,则doGet或者doPost方法失效部署、运行HelloWorldServlet在web.xml中部署Servlet后才能够使用Servlet在浏览器中输入,“http://localhost:8080/HelloWordServlet”,主要内容12.1JSP简介12.2JSP页面元素12.3JSP内置对象12.4Servlet12.5ServletAPI接口12.6开发Servlet12.5ServletAPI接口目的类、接口Servlet实现javax.servlet.Servlet,javax.servlet.SingleThreadModeljavax.servlet.GenericServlet,javax.servlet.http.HttpServletServlet配置javax.servlet.ServletConfigServlet异常javax.servlet.ServletException,javax.servlet.UnavailableException请求和应答javax.servlet.ServletRequest,javax.servlet.ServletResponsejavax.servlet.ServletInputStream,javax.servlet.ServletOutputStreamjavax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse会话跟踪javax.servlet.http.HttpSession,javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionBindingEventServlet上下文javax.servlet.ServletContextServlet协作javax.servlet.RequestDispatcher其他javax.servlet.http.Cookie,javax.servlet.http.HttpUtils一个简单的JSP+Servlet实例<html>
<head>
<title>Sayhi.html</title>
<metahttp-equiv=“Content-Type”content=“text/html;charset=UTF-8”>
</head>
<body>
<h2>Servlet范例程序</h2>
<formname=“Sayhi”Method=“Post”action=“/myapp/Sayhi”>
<p>请访问者输入姓名:<inputtype="text"name="Name"size="30"></p><inputtype="submit"value="提交">
<inputtype="reset"value="清除">
</form>
</body>
</html>importjavax.servlet.*;importjavax.servlet.http.*;importjava.io.*;publicclassSayhiextendsHttpServlet{publicvoidinit(ServletConfigconfig)throwsServletException{
super.init(config);
}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(“text/html;charset=UTF-8”);
PrintWriterout=response.getWriter();
request.setCharacterEncoding(“UTF-8”);
StringName=request.getParameter(“Name”);
out.println(“<html>”);
out.println(“<head><title>Sayhi</title></head>”);
out.println(“<body>”);
out.println(“Hi”+Name);
out.println(“</body>”);
out.println(“</html>”);
out.close();
//RequestDispatcherrd=request.getRequestDispatcher("userlist.jsp");//request.setAttribute(“Name“,"hello“+Name);
//rd.forward(request,response);}}一个简单的JSP+Servlet实例一个简单的JSP+Servlet实例<?xmlversion="1.0"encoding="ISO-8859-1"?>
<web-appxmlns="/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>Sayhi</servlet-name>
<servlet-class>Sayhi</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Sayhi</servlet-name>
<url-pattern>/Sayhi</url-pattern>
</servlet-mapping>
</web-app>
HttpSession使用实例importjav
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 严守规章的自律宣言
- 保密合同协议纠纷处理
- 热水器技术开发合同
- 不锈钢原料销售代理
- 矿山机械设备招标文件范本
- 高等级木方特惠采购协议
- 招标文件与合同的关联
- 铝包木窗招标方案
- 工程质量放心保证
- 摄像头监控设备采购招标
- 2025届高考语文复习:小说情节概括+课件
- 国开2024年秋《机电控制工程基础》形考任务2答案
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 2024年“农业经理人”职业技能大赛考试题库500题(含答案)
- 西方近现代建筑史智慧树知到期末考试答案章节答案2024年天津大学
- (高清版)TDT 1055-2019 第三次全国国土调查技术规程
- 2024年河北承德热力集团招聘笔试参考题库含答案解析
- 软件测试项目课件04黑盒测试
- DB31-T 540-2022 重点单位消防安全管理要求
- 上海地区空调逐时负荷自动计算表
- (精选文档)泉州市城镇职工基本医疗保险暂行规定
评论
0/150
提交评论