首页 > 其他 > 详细

关于servlet

时间:2020-05-18 20:24:33      阅读:56      评论:0      收藏:0      [点我收藏+]

2、servlet

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

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

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

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

    2.2.3 通过调用 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 setAttribute()和getParameterNames() 的区别:     

    2.7.1 getParameter得到的都是String类型的。或者是http://a.jsp id=123中的123,或者是某个表单提交过去的数据;
        getAttribute则可以是对象。
    2.7.2 getParameter()是获取POST/GET传递的参数值;
        getAttribute()是获取对象容器中的数据值。
    2.7.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"); %>

关于servlet

原文:https://www.cnblogs.com/Tibbers/p/12912342.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!