Servlet进阶

本文详细介绍了Servlet的相关知识,包括WEB请求与响应解析,请求转发与响应重定向,Session与ServletContext的工作原理,以及Servlet开发应用实践,如解决中文乱码、配置默认首页和错误页面等。此外,还讨论了打包与发布的注意事项。
摘要由CSDN通过智能技术生成

WEB请求与响应解析

  • URL统一资源定位符,表示Web应用对外暴露的访问地址
    • 示例:http://www.imooc.com/index.html
  • URI统一资源标识符,表示Web应用资源的访问路径
    • 示例:/index.html

请求的结构

HTTP请求包含三部分:请求行、请求头、请求体

image-20220704135557458

利用请求开发多端应用

@WebServlet("/ua")
public class UesrAgentServlet extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        // 得到请求结构 User-Agent中的属性
        String ua = request.getHeader("User-Agent");
        String output = "";
        // 判断获取的参数
        if (ua.toLowerCase().indexOf("iphone") != -1 || ua.toLowerCase().indexOf("android") != -1) {
   
            output = "<h1>这是移动端页面</h1>";
        } else if (ua.toLowerCase().indexOf("windows nt") != -1) {
   
            output = "<h1>这是PC端页面";
        }
        // 设置为UTF-8字符集
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(output);
    }
}

响应的结构

HTTP响应包含三部分:响应行、响应头、响应体

image-20220704191408592

HTTP常见状态码

image-20220704191629644

ContentType的作用

ContentType 决定浏览器采用何种方式对响应体进行处理

image-20220704193608534

请求转发与响应重定向

多个Servlet之间跳转有两种方式:

  1. request.getRequestDispatchar().forward():请求转发
  2. response.sendRedirect():响应重定向
请求转发

请求转发是服务器跳转,只会产生一次请求

响应重定向

重定向则是浏览器端跳转,会产生两次请求

设置请求自定义属性

请求允许创建自定义属性

设置请求:request.setAttribute(属性名,属性值)

获取请求属性: Object attr = request.getAttribute(属性名)

Session与ServletContext原理

浏览器cookie

Cookie 是浏览器保存在本地的文本内容。Cookie默认域名绑定,只有当前域名下的程序才能读取数据。Cookie具有时效性,Cookie会伴随请求头发送给服务器。

Cookie的时效性有两种情况:

  1. 默认Cookie有效期与当前浏览器进程绑定
  2. 设置过期时间后,Cookie过期后才会时效
/**
 * 用于生成随机数的Cookie
 */
@WebServlet("/cookie/random")
public class RandomServlet extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        // 获取随机整数
        Integer random = new Random().nextInt(10000);
        Cookie cookie = new Cookie("random", String.valueOf(random));
        // 设置Cookie时效
        cookie.setMaxAge(60*60*
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值