Skip to content

第四章 Servlet技术 v1.0 ​

第一部分 Servlet基础 ​

一、Servlet书写 ​

java
public class TestServlet extends HttpServlet {
    @Override  // 重写对应请求方法
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        // ... 具体实现
    }
}

二、Servlet基本配置 ​

1.基于XML配置文件 ​

xml
<servlet><!--Servlet配置-->
  <servlet-name>name</servlet-name><!--Servlet名称(名称必须唯一)-->
  <servlet-class>servlet.TestServlet</servlet-class><!--Servlet具体实现类完整路径-->
</servlet>
<servlet-mapping><!--Servlet配置url地址字符串映射,可以配置多个-->
  <servlet-name>name</servlet-name><!--Servlet名称(必须和<servlet>中的保持一致)-->
  <url-pattern>/url</url-pattern><!--Servlet请求地址字符串-->
</servlet-mapping>

优点:集中管理Servlet的配置,便于查找和修改。

缺点:代码较繁琐,可读性不强,不易于理解。

2.基于注解 ​

java
//直接在Servlet上添加注解
@WebServlet("/url")  //配置Servlet请求地址字符串(urlPatterns),可以使用数组
public class Register extends HttpServlet {
    @Override  // 重写对应请求方法
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        // ... 具体实现
    }
}

优点:直接在Servlet类中使用,代码量少,配置简单;且每个类只关注自身逻辑,与其他 Servlet 类互不干扰

缺点:Servlet 较多时,每个 Servlet 的配置分布在各自的类中,不便于查找和修改。

三、控制跳转 ​

1.转发 ​

基本语法:request.getRequestDispatcher("/url").forward(request, response);

2.重定向 ​

基本语法:request.sendRedirect("/url"); ·

3.转发与重定向的区别 ​

  1. 转发地址栏不变,重定向地址栏会发送改变
  2. 转发不支持跨域跳转,速度较快;重定向支持跨域跳转,速度较慢
  3. 转发为服务器行为,进行一次请求获得一次响应;重定向为客户端行为,进行两次请求获得两次响应
  4. 转发可以在转发请求中再绑定数据,而重定向无法再重定向请求中再绑定数据

四、请求与响应 ​

1.请求相关操作(HttpServletRequest接口) ​

  1. 设置请求字符集:setCharacterEncoding("UTF-8");
  2. 获取请求参数:getParameter("参数名");
  3. 获取请求参数数组:getParameterValues(String name);
  4. 将请求中的所有参数名和参数值装入一个 Map 对象中返回:getParameterMap();

2.响应相关操作(HttpServletResponse接口) ​

  1. 设置响应类型:setContentType("text/html;charset=UTF-8");
  2. 获取字符输出流:getWriter();
  3. 获取字节输出流:getOutputStream();
  4. 增加响应头字段:addHeader(String name,String value);
  5. 设置 HTTP 响应消息的状态码:setStatus(int status);
  6. 发送表示错误信息的状态码:sendError(int sc);

第二部分 Servlet进阶 ​

一、控制启动优先级 ​

1.配置项 ​

  1. xml配置(load-on-startup)
  2. 注解配置(loadOnStartup)

2.配置说明 ​

  1. 取值必须为整数
  2. 当值小于0或未指定时,Servlet容器在初次请求时才会被加载
  3. 当值大于0或等于0时,Servlet容器在启动时就加载并初始化该Servlet,取值越小,优先级越高

二、虚拟路径匹配 ​

1.多重映射实现方式 ​

  1. xml中配置多个<servlet-mapping>元素
  2. xml中配置多个<url-pattern>元素
  3. 在 @WebServlet 的urlPatterns属性中使用字符串数组

2.虚拟路径匹配规则 ​

第三部分 会话技术 ​

一、Cookie ​

1.简介 ​

Cookie 属于客户端会话技术,它是服务器发送给浏览器的小段文本信息,存储在客户端浏览器的内存中或硬盘上。当浏览器保存了 Cookie 后,每次访问服务器,都会在 HTTP 请求头中将这个 Cookie 回传给服务器。

Cookie默认是会话级别,保存到浏览器的内存中,浏览器关闭则Cookie失效;也可以通过设置是失效时间,使Cookie持久化的以文本文件的形式保存到硬盘上。

2.Cookie对象 ​

创建一个Cookie对象:Cookie cookie = new Cookie("cookieName", "cookieValue");

相关方法:

  1. setMaxAge(int s):设置Cookie最大有效时间,以秒为单位;若为负值则是会话级别
  2. getMaxAge():获取Cookie最大有效时间,以秒为单位;默认情况下为-1
  3. getName():用于获取Cookie的名称
  4. setValue(String value):用于设置Cookie的值
  5. getValue():用于获取Cookie的值
  6. setSecure(boolean flag):用于设置浏览器是否只能使用安全协议(如HTTPS)发送 Cookie

3.获取与保存Cookie ​

HttpServletResponse 接口和 HttpServletRequest 接口都定义了与 Cookie 相关的方法

  1. 添加Cookie:addCookie(Cookie cookie);
  2. 获取Cookie:getCookies();

4.缺点 ​

  1. 在 HTTP 请求中,Cookie 是明文传递的,容易泄露用户信息,安全性不高。
  2. 浏览器可以禁用 Cookie,一旦被禁用,Cookie 将无法正常工作。
  3. Cookie 对象中只能设置文本(字符串)信息,且客户端浏览器保存 Cookie 的数量和长度是有限制的。

二、Session ​

1.简介 ​

Session是服务器端会话技术,当浏览器访问Web服务器的资源时,服务器可以为每个用户浏览器创建一个 Session对象,每个浏览器独占一个Session对象。

由于每个浏览器独占一个 Session,所以用户在访问服务器的资源时,可以把数据保存在各自的 Session 中。当用户再次访问该服务器中的其它资源时,其它资源可以从 Session 中取出数据,为用户服务。

2.原理 ​

  1. 当客户端第一次请求会话对象时,服务器会创建一个 Session 对象,并为该 Session 对象分配一个唯一的 SessionID
  2. 服务器将SessionID以 Cookie(名称为:JSESSIONID,值为SessionID)的形式发送给客户端浏览器
  3. 客户端浏览器再次发送 HTTP 请求时,会将携带 SessionID 的 Cookie 随请求一起发送给服务器
  4. 服务器从请求中读取 SessionID,然后根据 SessionID 找到对应的 Session 对象。

3.生命周期 ​

创建->绑定数据->销毁

4.HttpSession ​

5.Session与Cookie对比 ​

三、其他 ​

1.隐藏表单域 ​

<input type="hidden"/>

2.重写URL ​

url?value=1