Servlet重点知识

知识点

  • 前言
  • 一、Servlet
    • 面试重点
  • 二、使用
    • 小结
    • 补充
  • 三、HttpServletRequest对象、HttpServlet是什么、Servlet生命周期
  • 四、Servlet日常开发
    • 1.@WebServlet(...)填写的资源路径问题
    • 2.响应体文本内容&&字符集编码utf-8
    • 3.读取请求参数——读取网页中收集用户填写的信息
    • 4.面试(重点):GET方法和POST方法有什么区别?
    • 5.资源重定向
  • 总结
  • 五、成绩录入及错误排查方法及完成JDBC
  • 六、
    • 6.1文件上传(使用频率高,重要性一般)
    • 6.2(重点)会话管理(Cookie/Session,使用频率高,面试多,难度大)
      • 6.2.1Cookie+Session
      • 6.2.2Session结构
      • 6.2.3Cookie
      • 6.2.4小结
  • 知识点全部总结


前言


一、Servlet

Servlet重点知识_第1张图片
Servlet重点知识_第2张图片
Servlet重点知识_第3张图片

面试重点

Servlet重点知识_第4张图片
Servlet重点知识_第5张图片
Servlet重点知识_第6张图片

二、使用

Servlet重点知识_第7张图片

@WebServlet("/req-info")
public class GetRequestInfoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 我们只做打印(在 IDEA 的控制台上看到显示),不做响应(浏览器看不到,白屏)
        // 1. 请求方法
        String method = req.getMethod();
        System.out.println("HTTP 方法: " + method);
        System.out.println();
        System.out.println();

        String requestURI = req.getRequestURI();
        System.out.println("requestURI: " + requestURI);
        StringBuffer requestURL = req.getRequestURL();
        System.out.println("requestURL: " + requestURL.toString());
        String pathInfo = req.getPathInfo();
        System.out.println("pathInfo: " + pathInfo);
        String contextPath = req.getContextPath();
        System.out.println("contextPath: " + contextPath);
        String servletPath = req.getServletPath();
        System.out.println("servletPath: " + servletPath);
        String pathTranslated = req.getPathTranslated();
        System.out.println("pathTranslated: " + pathTranslated);
        String queryString = req.getQueryString();
        System.out.println("queryString: " + queryString);
        System.out.println();
        System.out.println();

        String serverName = req.getServerName();
        System.out.println("serverName: " + serverName);
        int serverPort = req.getServerPort();
        System.out.println("serverPort: " + serverPort);
        String scheme = req.getScheme();
        System.out.println("schema: " + scheme);
        String protocol = req.getProtocol();
        System.out.println("protocol: " + protocol);
        System.out.println();
        System.out.println();

        // 请求头们(本质就是一组 Key-Value;不同之处 Key 是可以重复的)
        Enumeration<String> headerNames = req.getHeaderNames();
        // Enumeration 类似 Iterator(hasNext() + next())
        while (headerNames.hasMoreElements()) {
            String name = headerNames.nextElement();
            String value = req.getHeader(name);
            System.out.println(name + " := " + value);
        }
    }
}

小结

Servlet重点知识_第8张图片

补充

Servlet重点知识_第9张图片

三、HttpServletRequest对象、HttpServlet是什么、Servlet生命周期

Servlet重点知识_第10张图片
Servlet重点知识_第11张图片
Servlet重点知识_第12张图片
Servlet重点知识_第13张图片
Servlet重点知识_第14张图片

四、Servlet日常开发

1.@WebServlet(…)填写的资源路径问题

Servlet重点知识_第15张图片

2.响应体文本内容&&字符集编码utf-8

Servlet重点知识_第16张图片

@WebServlet("/output")
public class OutputResponseText extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");   // text/plain   application/json
        PrintWriter writer = resp.getWriter();
        writer.printf("输出");
    }
}

3.读取请求参数——读取网页中收集用户填写的信息

Servlet重点知识_第17张图片
Servlet重点知识_第18张图片

@WebServlet("/input")
public class InputRequestParameters extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        if (username == null) {
            // 没有 key
        }
        if (username.trim().isEmpty()) {
            // 有 key 没有 value
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        if (username == null) {
            // 没有 key
        }
        if (username.trim().isEmpty()) {
            // 有 key 没有 value
        }
    }
}

4.面试(重点):GET方法和POST方法有什么区别?

Servlet重点知识_第19张图片
Servlet重点知识_第20张图片

5.资源重定向

Servlet重点知识_第21张图片

总结

Servlet重点知识_第22张图片
Servlet重点知识_第23张图片
Servlet重点知识_第24张图片

五、成绩录入及错误排查方法及完成JDBC

Servlet重点知识_第25张图片
Servlet重点知识_第26张图片

六、

6.1文件上传(使用频率高,重要性一般)

上传文件前端

DOCTYPE html>
<html lang="zh-hans">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
    <form method="post" action="/upload.do" enctype="multipart/form-data">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="file" name="image">
        <button>上传button>
    form>
body>
html>

Servlet重点知识_第27张图片
Servlet重点知识_第28张图片

6.2(重点)会话管理(Cookie/Session,使用频率高,面试多,难度大)

6.2.1Cookie+Session

Servlet重点知识_第29张图片
Servlet重点知识_第30张图片

@WebServlet("/first-visit")
public class FirstVisitServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 第一次访问,需要办会员卡(cookie)+ 准备专属的文件柜(session)
        // 这个 session 对象就是你的专属服务柜
        HttpSession session = req.getSession(true);
        session.setAttribute("first-visit-at", new Date());

        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/plain");
        resp.getWriter().println("办理会员成功");

        // 1. 直接访问其他 URL,观察 请求中有没有 Cookie 头、观察应用/Cookie 有没有值
        // 2. 访问  /first-visit,观察响应头中的 Set-Cookie
        // 3. 再次访问其他 URL,观察 请求中有没有 Cookie 头、观察应用/Cookie 有没有值
    }
}

6.2.2Session结构

Servlet重点知识_第31张图片

Servlet重点知识_第32张图片
GetFirstTimeServlet

@WebServlet("/get-first-time")
public class GetFirstTimeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/plain");
        PrintWriter writer = resp.getWriter();

        HttpSession session = req.getSession(true); // 如果是会员,则返回之前的;如果不是,则新建
        if (session == null) {
            writer.println("没有专属文件柜,不是会员");
            return;
        }

        Object o = session.getAttribute("first-visit-at");
        if (o == null) {
            writer.println("文件柜有,但纸上没有记录内容");
            return;
        }

        Date date = (Date) o;
        writer.println(date);
    }
}

6.2.3Cookie

Servlet重点知识_第33张图片
OnlyGetCookieServlet

@WebServlet("/only-get-cookie")
public class OnlyGetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName() + " => " + cookie.getValue());
        }
    }
}

OnlySetCookieServlet

@WebServlet("/only-set-cookie")
public class OnlySetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie1 = new Cookie("name", "peixinchen");
        cookie1.setMaxAge(120);    // 设置过期时间
        // 其他
        resp.addCookie(cookie1);

        Cookie cookie2 = new Cookie("gender", "male");
        resp.addCookie(cookie2);
    }
}

6.2.4小结

Servlet重点知识_第34张图片

知识点全部总结

Servlet重点知识_第35张图片

你可能感兴趣的:(JavaWeb,servlet,java,开发语言)