2、servlet

  2.1 定义:

  servlet是一个运行在web服务器或者应用服务器上的一个小程序,处理请求发送相应的过程是用它来完成的,它是为了解决实现动态页面而衍生的。

  2.2 生命周期:

  servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.sevlet.Servlet接口的initservletdestroy方式表达。

    调用 init () 方法进行初始化

     调用 service() 方法来处理客户端的请求。

     通过调用 destroy() 方法终止(结束)

  2.3 基本构架:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletName extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
     
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
       
        super.doPost(req, resp);
    }
}

  2.4 servlet api中forward和redirect区别

    2.4.1 调用方式不同

   forward():request.getRequestDispatcher("user.jsp").forward(req, resp); //转发

   redirect():response.sendRedirect("user.jsp"); //重定向

    2.4.2 地址栏显示不同

   forward():服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。即在客户端浏览器地址栏中不会显示出转向后的地址。

   redirect():服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。即浏览器将会得到跳转的地址,并重新发送请求链接。

    2.4.3 数据共享:

   forward():转发页面和转发到的页面可以共享request里面的数据。

   redirect():不能共享数据。因为重定向可以访问自己web应用以外的资源,在重定向的过程中,传输的信息会被丢失。

    2.4.4 高效性:

   forward():效率高

   redirect():效率低

    2.4.5 在jsp中使用

   forward():<jsp:forward page="user.jsp" />

   redirect():<%response.sendRedirect("user.jsp"); %>

  2.5 什么情况下调用doGet()和doPost()方法?  

  jsp页面的form标签里的method属性对应相应的方法调用。

  2.6 request对象的主要方法:

    ▶ setAttribute(String name,Object):设置名字为name的request 的参数值
    ▶ getAttribute(String name)            :返回由name指定的属性值
    ▶ getAttributeNames()                     :返回request 对象所有属性的名字集合,结果是一个枚举的实例
    ▶ getCookies()                                   :返回客户端的所有 Cookie 对象,结果是一个Cookie 数组
    ▶ getCharacterEncoding()                :返回请求中的字符编码方式
    ▶ getContentLength()                        :返回请求的 Body的长度
    ▶ getHeader(String name)                :获得HTTP协议定义的文件头信息
    ▶ getHeaders(String name)              :返回指定名字的request Header 的所有值,结果是一个枚举的实例
    ▶ getHeaderNames()                         :返回所以request Header 的名字,结果是一个枚举的实例
    ▶ getInputStream()                            :返回请求的输入流,用于获得请求中的数据
    ▶ getMethod()                                    :获得客户端向服务器端传送数据的方法
    ▶ getParameter(String name)           :获得客户端传送给服务器端的有 name指定的参数值
    ▶ getParameterNames()                     :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实
    ▶ getParameterValues(String name):获得有name指定的参数的所有值
    ▶ getProtocol()                                    :获取客户端向服务器端传送数据所依据的协议名称
    ▶ getQueryString()                             :获得查询字符串
    ▶ getRequestURI()                              :获取发出请求字符串的客户端地址
    ▶ getRemoteAddr()                            :获取客户端的 IP 地址
    ▶ getRemoteHost()                             :获取客户端的名字
    ▶ getSession([Boolean create])         :返回和请求相关 Session
    ▶ getServerName()                             :获取服务器的名字
    ▶ getServletPath()                               :获取客户端所请求的脚本文件的路径
    ▶ getServerPort()                                :获取服务器的端口号
    ▶ removeAttribute(String name)      :删除请求中的一个属性

  2.7 getAttribute()和getParameterNames() 的区别:     

  (1) getParameter得到的都是String类型的。或者是http://a.jsp id=123中的123,或者是某个表单提交过去的数据;
        getAttribute则可以是对象


  (2) getParameter()是获取POST/GET传递的参数值;
        getAttribute()是获取对象容器中的数据值。


  (3) 当两个Web组件之间为链接关系时,被链接的组件通过getParameter()方法来获得请求参数;

        当两个Web组件之间为转发关系时,转发目标组件通过getAttribute()方法来和转发源组件共享 request范围内的数据。

例子:

①当要从 1.jsp 链接到 2.jsp 时,被链接的是2.jsp可以通过getParameter()方法来获得请求参数.

假如1.jsp里有

<form name="form1" method="post" action="2.jsp">

  请输入用户姓名:<input type="text" name="username">

  <input type="submit" name="Submit" value="提交">

</form>

在2.jsp中通过request.getParameter("username")方法来获得请求参数username:

<% String username=request.getParameter("username"); %>

②如果两个WEB间为转发关系时,转发目的WEB可以用getAttribute()方法来和转发源WEB共享request范围内的数据.

1.jsp希望向2.jsp传递名字:

<%

String username=request.getParameter("username");

request.setAttribute("username",username);

%>

<jsp:forward page="2.jsp" />

2.jsp通过getAttribute()方法获得用户名字:

<% String username=(String)request.getAttribute("username"); %>
posted on 2020-05-18 18:39  小潘同学  阅读(128)  评论(0)    收藏  举报
-->