关于servlet和jsp的学习总结三(详细)

来源:互联网 发布:淘宝卡西欧专卖店 编辑:程序博客网 时间:2024/05/22 01:33


再看下面文字时,首先我们要将上面的图搞清楚,这样在编码的时候就会根据不同的需求去继承不同的类了

Servlet  API的核心是javax.servlet.Servlet接口,所有的servlet类都必须继承这一接口,在Servlet接口中定义了5个方法,其中3个方法都有servlet容器来调用,容器会在servlet的生命周期的不同阶段来调用不同的方法。

@init(ServletConfigconfig)方法:负责初始化servlet对象。容器在创建好之后就开始调用这个方法。

@service(ServletRequestreq,ServletResponse res)方法:负责响应客户的请求。当容器收到来自客户端的消息之后,就会调用servic方法然后根据http协议中的get方法or post方法然后在servlet中用相应的doGet()和doPost方法来进行处理。

@destroy()方法:负责释放servlet对象占有的资源,当servlet对象结束生命周期的时候就会调用此方法。

 

 

当我们的servlet继承了GenericServlet类之后,就会自动复写父类的   @Override

      public voidservice(ServletRequest req, ServletResponse res)

                 throwsServletException, IOException {

      }方法。

此时将详细讲解ServletRequest 接口:

在上述的方法里有一个ServletRequest类型的参数。ServletRequest类表示来自客户端的请求,当servlet容器接收到客户端要访问特定的servlet请求之后,容器先解析客户端的原始数据,把它包装成一个ServletRequest对象。当容器调用servlet对象的service方法时,就可以把ServletRequest作为参数传递给service()方法

ServletRequest接口提供了一系列读取客户端的请求数据的方法

@getContentLength():返回请求正文的长度,如果请求正文长度未知,则返回-1;

@getContentType():获得请求正文的MIME类型,如果请求正文的类型未知,则返回null

@getInputStream():用于读取请求正文的输入流

@getLocalAddr():返回服务器端的IP地址

@getLocalName():返回服务器端的主机名

@getLocalPort():返回服务器端的ftp端口号

@getParameter(String name):根据给定的参数名,返回请求中德匹配请求参数值

@getProtocol():返回客户端和服务器端通信所用的协议名称及版本号

@getReader():返回用于读取字符串形式的请求正文的BufferReader对象。

@getRemoteAddr():返回客户端的ip地址

@getRemoteHost():返回客户端的主机名

@getRemotePort():返回客户端的ftp端口号

此外在ServletRequest接口中还定义了一组用于在请求范围内存取共享数据的方法

@setAttribute(String name,Object object):在请求范围之内保存一个属性值,参数name表示属性名,参数object表示属性值

@getAttribute(String name):根据name参数给定的属性名,返回请求范围内匹配的属性值

@removeAttribute(String name):从请求范围内删除一个属性值

此时将详细讲解ServletResponse接口:

在ServletResponse接口中定义了一系列与生成响应结果相关的方法

@setCharacterEnocoding(String charset)设置响应正文的字符编码,默认是iso-8859-1

@setContentLength(int len)设置响应正文的长度

@setContentType(String type):设置响应正文的MIME的类型

@getCharacterEncoding():返回响应正文的字符编码

@getContentType()返回响应正文的的MIME类型

@setBufferSize(int size):设置用于存放响应正文数据的缓冲区的大小

@getBufferSize    ():获得用于存放响应正文数据的缓冲区的大小

@reset():清空缓冲区的正文数据,并且清空响应状态代码及响应头

@resetBuffer():仅仅清空缓冲区正文数据,不清空响应状态代码及响应头

@flushBuffer():强制性地把缓冲区数据的响应正文数据发送到客户端

@isCommited():返回一个boolean,true代表缓冲数据以提交给客户端,false相反

@getOutputStream():返回一个ServletOutputStream对象用它来输出二进制数据

@getWriter():返回一个PrintWriter对象,servlet用它来输出字符串形式的数据

 

 

 

当继承HttpServlet后会复写父类的以下方法

public class Setvlert extendsHttpServlet {

      publicSetvlert() {

           super();

      }

      public voiddestroy() {

           super.destroy();// Just puts "destroy"string in log

     

      }

 

     

      public voiddoGet(HttpServletRequest request, HttpServletResponse response)

                 throwsServletException, IOException {

 

           response.setContentType("text/html");

           PrintWriter out =response.getWriter();

           out

                      .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML4.01 Transitional//EN\">");

     

      }

      public voiddoPost(HttpServletRequest request, HttpServletResponse response)

                 throwsServletException, IOException {

 

           response.setContentType("text/html");

           PrintWriter out =response.getWriter();

      }

      public void init()throws ServletException {

     

      }

}

HttpServletRequest接口是ServletRequest接口的子接口HttpServletRequest接口提供了用于读取Http请求中的相关信息

@getScheme()方法返回请求的计划,比如http,https或者ftp.
@getServerName()方法返回被发送请求的服务器的主机名
@getServerPort()方法返回被发送请求的端口号。
@getContextPath()返回请求地址的根目录,以"/"开关,但不是以"/"结尾。
一个常用的获得服务器地址的连接字符串是:
String path = request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

@getCookies() 取得cookie 
@getMethod() 取得请求方法,如get,post或put
@getRequestURL() 取得请求URL(统一资源定位符)
@getRequestURI() 取得请求URI(统一资源标识符)
@getSession() 取得对应session

 

@getHeaderNames()返回请求包含的所有头名称的一个enumeration(遍历器)

HttpServletReponse接口提供了用于设置Http请求中的相关信息

@从Servlet中可以通过getWriter方法取得PrintWriter对象,来输出字符数据。从Servlet中可以通过getOutputStream方法取得ServletoutputStream对象。ServletOutputStream既可以输出字符数据,也可以输出MIME格式的二进制数据。如果getWriter方法已经被使用过,当使用getOutputStream时,会有java.lang.IllegalStateException例外抛出。
  @setContentType方法:在响应中可以表明内容格式和长短。
  @setBufferSize方法:设置Web容器的缓冲器大小; getBufferSize方法返回Web容器的缓冲器大小; resetBuffer方法清空并重置缓冲器,使用reset方法清空缓冲器、状态头信息,使用flushBuffer方法将缓冲器内的所有输出内容向客户传递。使用isCommitted方法判断是否响应已经被履行。“履行”的定义是指状态码冬耕 信息已经被写入响应。
  @setLocal方法设定响应的地域信息,主要在Web程序的国际货币国际化时使用。这个方法应该在getWriter之前被使用。默认的Web服务器的地域信息。
  HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的方法,这些方法的主要功能是设置HTTP状态码和管理Cookie。
  @setStatus方法用来设置Servlet向客户端返回的状态码,它用来设置没有出错的状态。如果Servlet运行出错,Servlet可以使用sendError方法设置状态码,如sendError(int sc)方法设置错误状态代码。sendError(int sc,String msg)方法除了设置状态码,还向客户发出一条错误信息。
  @setHeader可以指定特定名称的头信息的值,addDateheader,addIntHeader,setDateHeader,setIntHeader可以加入或理性特定时间或整数型头信息。
  @addCookie方法可以在Web服务器响应中加入Cookie对象,这个对象将被浏览器所保存。Cookie机制也被用来维护会话状态。
  @sendRedirect方法向客户发出临时重新导向的响应。它生成的响应状态码为302。该响应给了客户一个新的URL风趣。如果缓冲器已经被清空,这个方法会弹出一个IllegalStateException例外。
原创粉丝点击