Servlet基础+request+response

2012/03/18 2189点热度 0人点赞 0条评论

 Servlet是什么

    * java编写的web应用组件

   * 用于动态网页输出

   * servlet使用servlet容器运行

如何定义一个servlet

   * 定义一个类实现Servlet接口

   * serlvet是单实例,多线程运行

 Servlet的生命周期

   init  service  destroy方法表示servlet的生命周期

     构造方法优先于init()执行,在servlet生命周期中执行一次

    init()

         第一个执行,在servlet生命周期中只执行一次,只在初始化的时候执行

         由servlet容器调用

    service()

         第二次执行,执行n次,当客户端发送请求的时候调用

         由servlet容器调用

    destroy()

         当servlet消亡时,由servlet容器调用执行,只执行1次

 在web.xml注册servlet  

<Servlet>
   <servlet-name>配置servlet的名称,给servlet的路径起个别名<servlet-name>
   <servlet-class>配置servlet使用类对应的路径</servlet-class>
</Servlet>
<servlet-mapping>
    <servlet-name>引用上面配置好的servlet名称</servlet-name>
    <url-pattern>对外访问的路径</url-pattern>
</servlet-mapping>

   init()

      ServletConfig config  保存servlet初始化的信息

           ServletConfig 的实现类对象由servlet容器创建StandardWrapperFacaded对象,保存了servlet初始化信息

   容器调用init方法,把StandardWrapperFacaded作为实参传递给方法形参

   

  在web.xml中配置对应servlet的初始化参数

<init-param>
   <param-name>参数名</param-name>
   <param-value>参数值<param-value>
<init-param>

  在init()中使用getInitParameter("book")获取参数值;

     当传递的参数没有该初始化的值得话,返回null

在init中使用getinitParameterNames()获取初始化参数的名称,返回的枚举

Enumeration<String> em=config.getinitParameterNames();
while(em.hasMoreElements())
      em.nextElement()

在init中使用getSerrvletName()获取注册的servlet名称

 在init中使用getServletContext()返回服务器端的共享内容,

   在servletContext中保存的信息,对所有的客户端都是共享的,

   一个web应用只有一个servletContext();

    Service()

        ServletRequest 保存了客户端的所有的请求信息

        ServletReponse 保存了服务器端回送给客户端的响应信息

 在web.xml中配置容器启动时初始化servlet

 在servlet的Init方法中配置初始化参数或者在web.xml中的<servlet>

<init-param>
    <param-name></param-name>
    <param-value></param-value>
</init-param>
<load-on-startup>2</load-on-startup>

     load-on-startup配置说明

      1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

      2)它的值必须是一个整数,表示servlet应该被载入的顺序

      3)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

      4)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

      5)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

      6)当值相同时,容器就会自己选择顺序来加载

Servlet映射

  同一个servlet可以映射到多个url上

     servlet映射的url可以使用*通配符配置成

         *.action(struct2) 和*.do(struts1) 或*.任意 的格式

   对于上面的情况*的前面不用加/

   前面使用/ ,不加*通配符 ,比如/a.do /b.action  访问的时候必须使用整个的路径如:a.do  b.action

   配置以/开头/*结尾的   /al/*    访问的时候只要是以/al/开头的都可以访问

   访问静态的html或者图片默认的使用缺省servlet

  映射URL的优先级(*号在前面优先级最低)

      servlet1 /abc/*

      servlet2 /*

      servlet3 /abc

      servlet4  *.do

       /abc/a.html   访问的是  servlet1

       /abc          访问的是  servlet3

       abc/a.do      访问的是  servlet1

       a.do          访问的是  servlet2

      /xxx/yyy/a.do  访问的是  servlet2

  设置request对象的字符编码

     request.setCharacterEncoding("utf-8");

       必须保证request在后台没有访问之前设置才有效

  以下代码只对post提交有效

request.getParameter("");      
request.getParameterValues("");
request.getHead(string);
request.getHeadName(string);
request.getHeadNames();

   

  获取CGI变量

      获取请求方法  request.getMethod()

      获取请求的内容类型  request.getContextType()

      获取web应用的根  request.getContextPath()

      获取请求路径后边字符串的参数  request.getQueryString()

      获取客户端请求的ip   request.getRemoteAddr()

      获取URI(统一资源标示符) request.getRequestURI()  URI包括URL

      获取客户端的url(统一资源定位符)地址  request.getRequestURL()

      获取访问的servlet路径  request.getServletPath()

      获取请求协议  request.getScheme()  http

      获取服务器的ip request.getServerName()

      获取服务器的端口号 request.getServerPort()

  获取响应

     设置响应的MIME类型和字符编码,如果response在后台被访问过来再设置就无效率

         response.setCharcterEnconding("utf-8");

         response.SetContentType("text/html");

    上面两个等同于 response.setContextType("text/html;charset=utf-8");

     获取响应的字符输出流

       PrintWriter out=response.getWriter();

       out.print(sdfsd);

     获取响应的直接输出流

       OutputStrem os=response.getOutputStream();

yxkong

这个人很懒,什么都没留下

文章评论