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("");
*
*/
}