servlet

java编写的,服务器端执行,用来扩展服务器功能,是一个web组件
凡是实现了Servlet接口的都是servlet类

1. 编写

  • extends HttpServlet
  • 重写doGet、doPost方法(HttpServletRequest,HttpServletResponse)

2. 执行servlet

定义servlet的映射名

2.1 web.xml文件配置

< servlet >
    < servlet-name >< /servlet-name >
    < servlet-class >< /servlet-class >
< /servlet>
< servlet-mapping >
    < servlet-name >< /servlet-name >
    < url-pattern >< /url-pattern >
< /servlet-mapping >
在这里插入图片描述

2.2 注解

@WebServlet("/hello");

在这里插入图片描述
在这里插入图片描述

3. HttpServlet继承关系

在这里插入图片描述

  • Servlet接口
    • 定义了servlet规范,只要实现此接口,实现类都是servlet类
    • 定义了servlet的生命周期方法
      在这里插入图片描述
  • GenericServlet类
    • 是Servlet的实现类,实现了servlet接口中的大部分方法,只有service方法没实现。
      在这里插入图片描述
  • HttpServlet类
    • 针对http协议定义了特定的处理方法,根据客户端的请求调用不同的处理方法。
      在这里插入图片描述

4. HttpServletRequset接口

继承 ServletRequest 接口
常用方法

  • 请求行
    request.getMethod();
    request.getProtocol();
    request.getRequestURI();//应用名称+请求资源名称
    request.getRequestURL();
  • 请求头
    Enumeration headernames = request.getHeaderNames();
    while(headernames.hasMoreElements()) {
        String name = headernames.nextElement();
        System.out.println(name+":"+request.getHeader(name));
    }
  • 请求表单信息
    request.getParameter(“name”);
    request.getParameterValues(“checkbox”);
    request.getQueryString();
    在这里插入图片描述
    在这里插入图片描述
  • 设置属性:setAttribute(String,Object);
  • 获取属性值:getAttribute(String);
  • 删除属性值:removeAttribute(String);

5. HttpServletResponse接口

父接口:ServletResponse

  • 响应页面:sendRedirect();
  • 响应页面信息:getWriter();
    • 回送一个json字符串
      response.getWriter().append("Served at: ")
      .append(request.getContextPath());
  • 设置响应文档类型:setContentType(“text/html;charset=UTF-8”);
  • 状态码
    • 200:ok
    • 400 – 499:页面错误
      • 404:页面未找到
      • 405:处理方法和提交方法不一致(doGet、doPost)
    • 500 – 599:服务器内部错误

6. 乱码

  • Tomcat7.0版本:中文乱码问题
    str = request.getParameter(“name”);
    new String(str.getBytes(“IOS-8858-1”),“UTF-8”)

  • post请求:中文乱码问题
    request.setCharacterEncoding(“UTF-8”);

7. 请求转发和重定向的区别

  • 请求转发
    在这里插入图片描述
  • 请求重定向
    在这里插入图片描述
请求转发请求重定向
属于服务器端的行为属于客户端行为
url中地址不变url中地址发生变化
可以使用request对象传递数据不能使用request传递数据,要重新发送请求
只能在当前应用中(当前工程中)可以在不同应用中重定向页面

8. servlet生命周期

由服务器管理servlet的生命周期
当客户端第一次向服务器发送请求时,由服务器创建对象

  • 第一阶段:调用init方法(创建完对象之后只调用一次)
    规定init方法不执行完毕,其他方法不能执行
  • 第二阶段:由service方法处理请求
    service方法中使用判断语句,根据发送请求的方式调用doGet或doPost方法
  • 第三阶段:由destroy方法销毁servlet对象
    只有在服务器上stop才会执行destroy方法。
    在这里插入图片描述
    在这里插入图片描述
    loadOnStartup方法:
    加载web应用时,就会创建对象。
    loadOnStartup>=0 值越小,越先被创建对象。
    在这里插入图片描述

9. ServletConfig对象的初始化参数

属于特定的servlet
封装当前的Servlet的初始化参数

  • 第一种方式: web.xml配置文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 第二种方式:注解
    • getServletConfig():ServletConfig
    • getInitParameter(“fileName”)
      在这里插入图片描述
      在这里插入图片描述

10. ServletContext对象和初始化参数

  • ServletContext对象表示web应用对象,有且只有一个
  • 生命周期:web应用发布到服务器上,由服务器创建该对象;当服务器关闭或web应用从服务器上移除,对象销毁。(和web应用的生命周期相同)
  • 配置web应用的初始化参数,在整个web应用的web组件都可以访问。

10.1 配置初始化参数:web.xml中

在这里插入图片描述

获取对象:
getServletContext()
getInitParameter()
在这里插入图片描述
在这里插入图片描述
jsp中:application是内置对象,可直接使用。
在这里插入图片描述
在这里插入图片描述

10.2 在web组件中传递数据

  • setAttribute();
  • getAttribute();
  • removeAttribute();

requestServletContext传递数据方式比较:

  • request的生命周期短,节省内存。
  • ServletContext适合计数,用键值对来存数据。
    在这里插入图片描述

11. servlet的工作模式

servlet是单例,多线程的工作模式。

  • 线程安全的变量
    定义在doGet、doPost中的变量
  • 线程不安全的变量
    多个线程共用的变量。
    在这里插入图片描述

12. 一个servlet处理多个请求

  • user.jsp
    在这里插入图片描述
  • UserServlet.java
    在这里插入图片描述
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐