Java Web程序开发与分析课件:Servlet编程(二)_第1页
Java Web程序开发与分析课件:Servlet编程(二)_第2页
Java Web程序开发与分析课件:Servlet编程(二)_第3页
Java Web程序开发与分析课件:Servlet编程(二)_第4页
Java Web程序开发与分析课件:Servlet编程(二)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaWeb程序设计

——Servlet编程(2)2主要内容

Servlet请求和响应接口HttpServletRequest接口HttpServletResponse接口

Servlet会话和上下文接口HttpSession接口ServletContext接口

Servlet异常处理3HttpServletRequest接口HttpServletRequest接口声明的语法格式为:

publicinterfacejavax.Servlet.http.HttpServletRequestimplementsServletRequestServlet运行时是请求驱动,Web服务器在接收到一个Servlet的请求时,将把这个请求封装成一个HttpServletRequest对象,然后把对象传给Servlet的相应方法。4

在Servlet的程序中,获取客户端的信息主要是通过调用接口HttpServletRequest提供的方法,HttpServletRequest接口提供的方法主要有:

(1)publicStringgetHeader(Stringname):

返回指定请求头(header)的值,如果存在多个具有相同名称的头,则返回第一个头的信息。

(2)publicStringgetMethod():

返回用于发出此请求的Http方法的名称,如:GET,POST等。5

(3)publicStringgetServletPath():

返回请求中调用Servlet的URL部分,以“/”开头,包括Servlet名称或到Servlet的路径。(4)publicHttpSessiongetSession():

返回与此请求关联的当前HttpSession对象,如果没有当前会话,则会创建一个会话。(5)publicStringgetParameter(Stringname):

返回请求中“name”参数的值。(6)publicString[]getParameterValues(Stringname):

返回“name”参数中的所有值。6

(7)publicEnumerationgetParameterNames():

返回请求中的所有参数名。

(8)publicstringgetServerName():

返回请求的服务器主机名。

(9)publicintgetServerPort():

返回服务器接收请求的端口号。

7HttpServletResponse接口声明的语法格式为:

publicinterfacejavax.Servlet.http.HttpServletResponseimplementsServletResponse

HttpServletResponse接口给出了对客户端的HTPP响应的方法,主要有:

(1)publicvoidaddHeader(Stringname,Stringvalue):

用给定名称和值添加响应头。

HttpServletResponse接口8

(2)publicStringencodeRedirectURL(Stringurl):

对指定的URL进行编码,以便在HttpServletResponse.sendRedirect()方法中使用它,发送到该方法中的所有URL都应该通过此方法运行。

(3)publicvoidsendRedirect(Stringurl):

使用指定重定向位置URL将临时重定向响应发送到客户端。

(4)publicvoidsendError(intsc,Stringmsg):

使用指定状态将错误响应发送到客户端,默认情况下,服务器将创建类似HTML格式的服务器错误页面响应,该页面包含指定消息。9例:Servlet请求和响应实例(应用HttpServletRequest和HttpServletResponse)

ReqResServlet.java的代码:

packagepack;

importjava.io.*;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassReqResServletextendsHttpServlet{

Servlet10protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding("gb2312");response.setContentType("text/html;charset=gb2312");PrintWriterout=response.getWriter();out.println("<h3><br>客户使用的协议是:");out.println("request.getProtocol()");out.println("<br>客户提交信息的方式:");out.println(request.getMethod());out.println("<br>获取HTTP头文件中Host的值:");out.println(request.getHeader("Host"));11out.println("<br>获取客户机的名称:");out.println(request.getRemoteHost());out.println("<br>获取客户的IP地址:");out.println(request.getRemoteAddr());out.println("<br>获取服务器的名称:");out.println(request.getServerName());out.println("<br>获取服务器的端口号:");out.println(request.getServerPort());out.println("</h3>");}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}12<servlet><description></description><display-name>ReqResServlet</display-name><servlet-name>ReqResServlet</servlet-name><servlet-class>pack.ReqResServlet</servlet-class></servlet><servlet-mapping><servlet-name>ReqResServlet</servlet-name><url-pattern>/ReqResServlet</url-pattern></servlet-mapping>web.xml文档13运行结果:14主要内容Servlet请求和响应接口HttpServletRequest接口HttpServletResponse接口

Servlet会话和上下文接口HttpSession接口ServletContext接口

Servlet异常处理15

会话是客户端发送请求,服务器返回响应的连接时间段,会话管理是Servlet的重要功能之一。

HttpSession接口为Servlet提供会话追踪(session-tracking),HttpSession对象存放在服务器端。

Servlet引擎为每一个连接分配一个ID,并在建立会话时将其分配给客户端:

HttpSession接口服务器客户端ID16HttpSession接口封装了会话的概念,其声明的语法格式为:

publicinterfacejavax.Servlet.http.HttpSession

该接口的常用方法为:

(1)获得一个HttpSession实例对象

使用HttpServletRequest的getSession()方法,获取当前连接的会话对象。其语法格式为:

HttpSessionsession=request.getSession()

需要注意,调用getSession()方法会影响后面的响应,所以只能在发送任何文档内容之前调用该方法。17(2)访问和设置与会话相关的信息

getAttribute():获取一个属性的值

setAttribute():添加一个属性的值removeAttribute():删除一个属性的值getCreationTime():获得会话首次的建立时间

……

(3)删除会话数据

删除整个会话:invalidate()方法;

18例:实现一个使用HttpSession管理会话的Servlet,用来传递页面数据。packagepack;importjava.io.*;importjavax.servlet.ServletException;importjavax.servlet.http.*;importjavax.servlet.*;publicclassSessionServletextendsHttpServlet{19

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=GB2312");PrintWriterout=response.getWriter();out.println("<html><head>");out.println("<title>HttpSessionServlet"+"</title>");out.println("</head><body>");20//获取会话对象HttpSessionsession=request.getSession();//从会话对象中读取数据BooleanisLogin=(Boolean)session.getAttribute("isLogin");if(isLogin==null){isLogin=Boolean.FALSE;}Stringuser=request.getParameter("user");Stringpassword=request.getParameter("pass");if(isLogin.booleanValue()){//从会话对象中读取数据user=(String)session.getAttribute("user");out.println("<h2>欢迎您,"+user+"!</h2>");}21elseif((user!=null)&&(password!=null)){ //在会话对象中保存数据

session.setAttribute("user",user); session.setAttribute("isLogin",Boolean.TRUE); out.println("<h2>欢迎您,"+user+"!</h2>"); }22else{

out.println("<h2>请在下面输入登录信息</h2>");

out.println("<formmethod=\"post\"action=\"SessionServlet\">");

out.println("<table>");

out.println("<tr>");

out.println("<td>用户名:</td>");

out.println("<td><inputname=\"user\"type=\"text\"></td>");

out.println("</tr>");

out.println("<tr>");

out.println("<td>密码:</td>");

out.println("<td><inputname=\"pass\"type=\"password\"></td>");

out.println("</tr>");

处理表单数据的Servlet23out.println("<tr>");

out.println("<td></td>");

out.println("<td><inputname=\"ok\"type=\"submit\"value=\"确定\"></td>");

out.println("</tr>");

out.println("</table>");

out.println("</form>");

out.println("</body>");

out.println("</html>");

}

24<servlet>

<description></description>

<display-name>SessionServlet</display-name>

<servlet-name>SessionServlet</servlet-name>

<servlet-class>pack.SessionServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>SessionServlet</servlet-name>

<url-pattern>/SessionServlet</url-pattern>

</servlet-mapping>web.xml文档25运行结果:2627ServletContext接口定义了一个Servlet的环境对象,通过这个对象,Servlet引擎向Servlet提供环境信息。

ServletContext对象是服务器上包含该Servlet的Web应用,可用于在同一个Web应用中的Servlet间共享数据。其主要方法包括:

(1)用于保存和获得应用程序范围内的属性值

getAttribute();

ServletContext接口28getAttributeNames();

removeAttribute();

setAttribute();

(2)获得有关Servlet引擎和API的日志信息(服务器信息)

getServletInfo();

log();29ServletContext接口的应用:

在一个Web应用程序中只有一个ServletContext对象,并且可以被Web应用程序中的所有Servlet访问,因此,可以在ServletContext对象中保存共享信息。

问题:在Web开发中常常需要统计某个页面的访问次数,可以使用ServletContext对象来保存访问的次数。这与JSP编程中采用session内置对象来记录访问次数会有什么不同。

30主要内容Servlet请求和响应接口HttpServletRequest接口HttpServletResponse接口

Servlet会话和上下文接口HttpSession接口ServletContext接口

Servlet异常处理31

在Servlet中有两种异常处理机制:声明式异常处理和程序式异常处理。(1)声明式异常处理该种处理方式是在web.xml文件中声明对各种异常的处理方法,是通过<error>元素来声明的。其过程包括:

编写处理异常的Servlet; 配置<error>元素;32

例:HTTP错误代码的处理,编写专门处理HTTP错误的Servlet。ErrorServlet.java代码:packagepack;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.PrintWriter;publicclassErrorServletextendsHttpServlet{33protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,java.io.IOException{resp.setContentType("text/html;charset=GB2312");PrintWriterout=resp.getWriter();

Integerstatus_code=(Integer)req.getAttribute("javax.servlet.error.status_code");

out.println("<html><head><title>ErrorPage</title></head>");out.println(“<body>”);

重写HttpServlet中的Service()方法34switch(status_code){

case401:break;

case404:out.println("<h2>HTTPstatuscode:"+status_code+"</h2>");out.println("Thepageisdeletedorthenameischanged."); out.println("<ahref='mailto:admin@'>Administrator</a>ServiceSupport");break;

default:break;}out.println("</body></html>");out.close();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论