Servlet

package com.an.tomcatservlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author apy
 * @description
 * @date 2021/10/20 17:55
 */
public class MyServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        super.init();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
        String method = req.getMethod();
        req.getParameter("");

        req.setCharacterEncoding("utf-8");

        req.getRequestDispatcher("请求路径").forward(req, resp);

        req.setAttribute("", "");// put
        req.getAttribute("");// get




        // 响应头
        resp.setHeader("", "");
        resp.addHeader("", "");
        resp.setHeader("Content-Type", "text/html");
        resp.setContentType("text/plain");

        // 响应状态码
        resp.setStatus(1, "");

        // 响应内容
        resp.getWriter().write("");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        resp.sendRedirect("请求路径");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);

        Cookie cookie = new Cookie("jack", "123344");
        cookie.setMaxAge(3*24*3600);
        cookie.setPath("/tb/");
        resp.addCookie(cookie);


        HttpSession session = req.getSession();
        session.setAttribute("", "");// set
        session.getAttribute("");// get
        session.setMaxInactiveInterval(200);
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.service(req, resp);

        this.getServletContext();
        this.getServletConfig().getServletContext();
        ServletContext servletContext = req.getServletContext();
        servletContext.getInitParameter("");


        ServletConfig servletConfig = this.getServletConfig();// get
        String initParameter = servletConfig.getInitParameter("");
    }

    @Override
    public void destroy() {
        super.destroy();
    }

    /**
     * 【servlet】
     *      一个Servlet 负责 对应的一个URL访问请求,并返回相应的响应内容
     *          在web.xml中 添加 请求URL与Servlet的映射关系
     */


    /**
     * 【servlet生命周期】
     *      创建: 当客户端请求时,servlet容器根据 请求路径 在web.xml中找到 指定的servlet类,然后反射生成对象
     *      销毁: 当 servlet容器销毁时,servlet对象 销毁
     *
     *   上述也不是绝对情况,可以 在web.xml中使用<load on startup>1<load on startup/> 可以将指定的servlet在容器启动时创建
     */

    /**
     * 【servlet容器的Request对象、Response对象】
     *      servlet容器  将  客户端请求 封装为 Request对象
     *
     *      servlet容器  将  客户端请求处理结果 封装为 Response对象
     */

    /**
     * 【servlet乱码问题】
     *      1、结果乱码:
     *          对结果使用String进行重新编码
     *          String nameSrc = "jack";
     *          String name = new String(nameSrc.getBytes("ios-8859-1"), "utf-8");
     *      2、get、post请求乱码
     *            req.setCharacterEncoding("utf-8");
     *      3、response乱码
     *            resp.setCharacterEncoding("utf-8");
     *            resp.setContentType("text/html;charset=utf-8");
     */


    /**
     * 【servlet Request请求转发】
     *      为了实现 同一个请求 可以跳转多个servlet
     *      req.getRequestDispatcher("请求路径").forward(req, resp);
     *
     *      客户端只发送一次请求
     *      浏览器地址栏不会变化
     *      请求过程中 只有 一个Request、Response
     *      多个 servlet 共享一个 Request、Response
     */


    /**
     * 【servlet Request作用域】
     *      为了实现 在同一个请求 中 多个servlet 可以数据共享
     *      req.setAttribute("", "");// put
     *      req.getAttribute("");// get
     */

    /**
     * 【servlet Response重定向】
     *      请求转发 每次请求 都需要 重新提交表单,为了解决这个问题
     *      resp.sendRedirect("请求路径");
     *
     *      客户端发送2次请求
     *      浏览器地址发生变化
     *      请求过程中 有2个Request、Response
     *      2个servlet不能共享 同一个 Request、Response
     */


    /**
     * 【servlet cookie】
     *      why?
     *          为了解决 客户端发送不同请求,需要相同数据 问题;
     *      what?
     *          一种 在客户端 保存 http状态信息的 技术;
     *
     *          当 客户端首次请求服务器时,服务器会在 响应头 传送给 客户端,
     *          浏览器保存了cookie后,以后每次请求服务器,都会在 请求头 携带cookie 发送至服务器;
     *
     *          一个cookie 只能记录一种信息,k-v形式;
     *
     *          一个服务器可以 给浏览器 传送多个cookie,一个浏览器 也可以保存多个cookie;
     *      how?
     *          Cookie cookie = new Cookie("jack", "123344");
     *          resp.addCookie(cookie);
     *
     *      分类:
     *          临时cookie
     *              默认存储在内存中,当浏览器关闭,cookie失效;
     *          持久性cookie
     *              Cookie cookie = new Cookie("jack", "123344");
     *              cookie.setMaxAge(3*24*3600);
     *              resp.addCookie(cookie);
     *
     *              保存在浏览器的某个存储目录,过期后,才会失效;
     *
     *      每个cookie 只保存一对k-v,如果想存储多个cookie,需要创建多个cookie对象;
     *
     *      cookie.setPath("/tb/");
     *          只有 请求路径 与 cookie路径相关,cookie才会生效;
     */

    /**
     * 【servlet session】
     *      why?
     *          为了解决 客户端发送不同请求,需要相同数据 问题;
     *      what?
     *          一种 在服务器 保存 http这条信息的 技术;
     *          依赖 cookie 技术 实现;
     *              服务器 生成的session (k-v),客户端请求时 携带 k
     *          每个用户独立拥有一个session对象;
     *          默认存储时间是30分钟;
     *
     *          session :
     *              k : jsessionid
     *              v : session值
     *
     *      how?
     *          HttpSession session = req.getSession();
     *          session.setAttribute("", "");// set
     *          session.getAttribute("");// get
     *
     *      每次关闭浏览器,session会失效,重新请求会重新生成一个session;
     *
     *      自定义 session 生存时长 ;
     *          session.setMaxInactiveInterval(200);
     *
     *
     */


    /**
     * 【servlet ServletContext】
     *      why?
     *          解决不同用户 数据共享 问题;
     *       what?
     *          运行在 JVM上的每个 web应用程序 都有 一个 与之对应的ServletContext;
     *
     *          ServletContext可以被 web应用程序的 所有servlet访问;
     *
     *      How?
     *          ServletContext 由 Servlet容器创建,一个 web应用程序 只有 一个 ServletContext对象;
     *
     *          获取ServletContext:
     *              this.getServletContext();
     *              this.getServletConfig().getServletContext();
     *              req.getServletContext();
     *
     *      其他作用:
     *          获取web.xml中配置的公共属性值
     *              servletContext.getInitParameter("");
     *
     *          获取 应用程序路径
     */

    /**
     * 【servlet ServletConfig】
     *      why?
     *          在web.xml中 每个servlet 可以自定义 初始化参数,但是 ServletContext只能获取 应用级的 初始化参数;
     *
     *      How?
     *          获取当前 servlet的 初始化参数
     *              ServletConfig servletConfig = this.getServletConfig();// get
     *              String initParameter = servletConfig.getInitParameter("");
     *
     */
    
}

  

posted on 2021-10-21 16:59  anpeiyong  阅读(19)  评论(0)    收藏  举报

导航