servlet

作者: 寂静的春天1988 | 来源:发表于2020-08-07 14:50 被阅读0次

servlet的作用:接收请求数据,处理请求,完成响应。

servlet的大多数方法不由我们调用,而是tomcat调用。servlet对象也是由tomcat创建。

servlet接口

public class ServletTest implements Servlet{
    
    
    
    /**
     * 生命周期方法:
     * servlet对象销毁之前被tomcat调用,并只调用一次。
     * 
     * 
     */
    @Override
    public void destroy() {
        System.out.println("destroy...");
    }
    
    /**
     * 获取servlet配置信息
     */
    @Override
    public ServletConfig getServletConfig() {
        System.out.println("getServletConfig...");
        return null;
    }
    
    /**
     * 获取servlet信息
     */
    @Override
    public String getServletInfo() {
        System.out.println("getServletInfo...");
        return null;
    }
    
    /**
     * 生命周期方法:
     * servlet对象创建之后马上被tomcat调用,并只执行一次。
     * 
     * 
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }
    
    
    /**
     * 生命周期方法:
     * 它会被调用多次!!
     * 每次处理请求,都是在调用这个方法。
     * 
     * 
     */
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        System.out.println("service...");
    }

}

配置路径

image.png

通过运行得知:init方法在servlet被第一次访问时执行,且只执行了一次。可以得出,servlet在第一次被访问时创建,并且只创建一次,servlet是单例的。destroy方法在服务器停止时执行。servlet是单例的,说明也是线程不安全的。

总结特性:
1、单例
2、线程不安全,效率高。

servlet类由我们写,但由服务器创建,并由服务器来调用相应的方法。

servlet相关的类

1、ServletConfig


ServletConfig.png

一个ServletConfig对象,对应着相应的web.xml中的servlet配置信息。

2、ServletRequest
封装了请求信息。请求头,请求体。

3、ServletResponse
响应对象

4、ServletContext
servlet上下文,服务器bai开始,其就存在,服务器关闭,其才释放,ServletContext所有用户用一个。
所以一些全局的参数可以配置在servletContext中
这里需要注意一点,如果你的应用是分布式部署的,那么每台服务器实例上部署的应用实例都各自拥有一个ServletContext实例。

  <!-- 全局配置参数,因为不属于任何一个servlet,但是所有的servlet都可以通过servletContext读取这个数据 -->

  <context-param>

         <param-name>param1</param-name>

         <param-value>value1</param-value>

  </context-param>

   <context-param>

         <param-name>param2</param-name>

         <param-value>value2</param-value>

  </context-param>

ServletContext是javaWeb四大域对象之一:
1、PageContext
2、ServletRequest
3、HttpSession
4、ServletContext

可以用setAttribute和getAttribute,设置值和获取值。

servlet在tomcat启动是创建

  <servlet>
    <servlet-name>Bservlet</servlet-name>
    <servlet-class>com.fuiou.servlet.Bservlet</servlet-class>
    <load-on-startup>0</load-on-startup>
  </servlet>

req.getRemoteAddr()//获取ip地址
req.getMethod()//获取请求方式,post/get

需求:一个请求需要多个servlet才能完成。


image.png

req.getRequestDispatcher("/Bservlet").forward(req, resp);
请求转发:Aservlet可以设置响应头,Bservlet设置响应头和响应体。

req.getRequestDispatcher("").include(req, resp);
请求包含:由两个servlet共同完成

resp.sendRedirect("");
重定向:是两次请求

请求转发和重定向的区别
1、请求转发是一次请求一次响应,而重定向是两次请求两次响应
2、请求转发地址栏不变化,而重定向会显示后一个请求地址
3、请求转发只能转发道本项目其他servlet,而重定向还可以定向道其他项目
4、请求转法师是服务器行为,只需给出转发servlet路径,而重定向要给出requestURI,即包含项目名。
5、两者相比,请求转发效率较高,但是如果需要地址栏发生变化,就只能用重定向,如果需要在下一个servlet中获取request的数据,那么只能用请求转发。

servlet三大域对象

request:生命周期,一次请求。
session:生命周期,浏览器关闭。
application:生命周期,程序销毁。

编码问题。

1、响应编码
使用resp.getWriter();向客户端发送字符数据,如果之前没设置编码,那么一定会乱码。默认用的是iso-8859-1,浏览器会当成GBK
2、服务器可以使用resp.setCharacterEncoding("UTF-8");但是浏览器还是用GBK,所以还是乱码。
3、resp.setHeader("Content-Type", "text/html;charset=utf-8");通过设置响应头,来告诉浏览器使用什么编码。这个方法还是设置了setCharacterEncoding的编码,所以不用调用setCharacterEncoding了。

响应编码.png

2、请求编码

1、在地址栏中直接给出参数(GBK)
2、在页面中点击表单或者链接(UTF-8)如果你的页面是utf-8的,那么传递的参数就是utf-8
3、tomcat默认使用iso来处理请求参数
get请求,
1)修改tomcat的config/server,xml的URIEncoding=''UTF-8"
2)使用iso编码,然后utf-8解码回来。

注意:tomcat8默认使用的utf-8,所以就不用改了
post请求
req.setCharacterEncoding("UTF-8");
String name=req.getParameter("name");
System.out.println(name);

URL编码:把中文转成%后面跟随两位16进制

相关文章

  • servlet 笔记

    servlet servlet 声明周期 Servlet 的线程安全 Servlet 获取配置信息 Servlet...

  • Servlet

    Servlet介绍 Servlet开发步骤 创建Servlet 配置Servlet 配置Servlet中设置初始化...

  • 深入理解Servlet技术

    1. 什么是servlet servlet Servlet是javax.servlet.Servlet包中定义的一...

  • Servlet与Jsp(1)

    Servlet 实现原理Servlet接口使Servlet容器能将Servlet类载入内存,并在Servlet实例...

  • web.xml不同版本之间头信息的区别

    一、Servlet 2.3 二、Servlet 2.4 三、Servlet 2.5 四、Servlet 3.0 五...

  • Servlet入门

    Servlet简介 Servlet(Servlet Applet)是Java Servlet的简称,称为小服务程序...

  • Servlet 实例

    Servlet 实例 Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接...

  • Java Servlet API

    Servlet 支持的版本 Servlet 3.0 新特性详解 Servlet 3.0 新特性概述Servlet ...

  • 简单认识Servlet

    Servlet与JSP的关系 初识Servlet Servlet层级关系 顶层Servlet接口 GenericS...

  • 2019-10-14 SpringMVC与Servlet接口 S

    SpringMVC与Servlet接口 Servlet接口规范 Servlet 接口 定义servlet接口规范i...

网友评论

      本文标题:servlet

      本文链接:https://www.haomeiwen.com/subject/tzrorktx.html