Servlet简介

Servlet
  • 用Java编写的服务器端程序,用于处理Web请求。用户在浏览器中发送请求后,Servlet接收请求,并响应. 然后将生成的响应返回给客户端浏览器.
  • servlet是一种规范(接口),没有main方法,由谁执行呢? servlet由tomcat创建, servlet方法由tomcat调用. servlet需要依赖 tomcat 才能运行.
Tomcat
  • 轻量级Web服务器,用来运行Servlet和JSP。提供"网上信息浏览服务",程序员不用对协议进行操作.
Web根目录转发问题
1. Web 服务器的根目录

web 目录是 Web 应用的根目录,服务器(Tomcat)会将这个目录中的文件作为应用的静态资源和 JSP 文件根目录。也就是说,只有放在 web 目录下的文件才能通过 URL 或转发路径直接访问。

2. 转发路径的相对路径约定

在 Java Web 项目中,转发路径(RequestDispatcher.forward)会从 web 目录的根目录开始寻找 JSP 文件。比如 req.getRequestDispatcher("/login.jsp") 会从 web 目录的根目录开始寻找 login.jsp

  • 例如,如果 JSP 文件放在 src 目录或其他文件夹中,Web 容器将无法直接访问或转发到这些位置,因为 src 是编译代码的位置,不会被打包到发布的应用中。
Servlet生命周期:
  • 指的是servlet从创建到被销毁的整个过程. 四个阶段:加载和实例化( tomcat完成 ),初始化(只执行一次) ,请求处理(service方法), 服务终止(servlet销毁前调用destroy方法).
  • Servlet 接口:
public interface Servlet {
    void init(ServletConfig config);       // 初始化方法
    void service(ServletRequest req, ServletResponse res); // 请求处理方法
    void destroy();                        // 销毁方法
    ServletConfig getServletConfig();      // 获取 Servlet 配置
    String getServletInfo();               // 获取 Servlet 信息
}
Servlet的继承关系:
  • 继承关系:Servlet–>GennericServlrt–>HttpServlet(从左到右),
  • 我们写的servlet 要继承 HttpServlet 并重写 doget 和 dopost 方法.
  • HttpServlet 类:
public abstract class HttpServlet extends GenericServlet {
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest hreq = (HttpServletRequest) req;
        HttpServletResponse hres = (HttpServletResponse) res;
        
        // 根据 HTTP 请求的方法类型(GET、POST等)调用相应的处理方法
        if ("GET".equalsIgnoreCase(hreq.getMethod())) {
            doGet(hreq, hres);
        } else if ("POST".equalsIgnoreCase(hreq.getMethod())) {
            doPost(hreq, hres);
        } else {
            // 处理其他请求类型
            doOther(hreq, hres);
        }
    }

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 处理 GET 请求
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 处理 POST 请求
    }

    // 其他 HTTP 方法的处理方法(例如 doPut()、doDelete() 等)
}

服务器内部转发和客户端重定向
req.getRequestDispatcher("/index.jsp").forward(req,resp);//请求转发  
resp.sendRedirect("/index.jsp");//请求重定向
  • 转发:是把客户端请求交给另一个组件实现,然后由完成请求的组件响应.这个过程中,地址栏不变.这是一次请求响应的过程,对于客户端而言,内部经历了多少次转发,客户端并不知道.

  • 转发:可以在请求内部共享数据.

  • 重定向:一个组件接收到请求后立即响应客户端,告知客户端给另一个组件发请求,然后另一个组件接收并响应客户端的请求.地址栏有变化.这是两次请求响应的过程,客户端知道经历的转发.

  • 302状态码通常表示“临时重定向”.

保存作用域
  • 有四个:page(过时了),request(一次请求范围),session(一次会话范围),application(整个应用程序范围).
  • request:在一个 HTTP 请求的生命周期内有效
// 设置数据到请求作用域
req.setAttribute("1", "warren");

// 转发请求到另一个 Servlet
req.getRequestDispatcher("servlet").forward(req, resp);

// 在转发后获取数据
Object attribute = req.getAttribute("1");
System.out.println(attribute);  // 输出: warren

// 如果使用重定向,获取到的会是 null,因为重定向会创建一个新的请求

  • session:数据在会话期间是共享的.
//使用getSession,只要会话没有过期,便可以获取到.
req.getSession().setAttribute("1","warren");  
req.getRequestDispatcher("servlet").forward(req,resp);

Object attribute = req.getSession().getAttribute("1");  
System.out.println(attribute);
  • application:不同的浏览器也能访问,只要tomcat没有停止.
ServletContext application = req.getServletContext();//Servlet上下文,可以理解成web应用程序,所以只要tomcat没有停止就可以访问.  
application.setAttribute("1","warren");

ServletContext application = req.getServletContext();  
Object   attribute = application.getAttribute("1");  
System.out.println(attribute);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值