J2EE之Servlet学习笔记(六):跳转与自启动

本文深入探讨了Web应用中两种常见的页面跳转方式:服务端跳转和客户端跳转,并通过示例代码展示了它们的区别。此外,还介绍了如何配置Servlet实现自启动,确保关键初始化代码在Tomcat启动时自动执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

页面跳转是开发一个web应用经常会发生的事情
比如登录成功或失败后,分别会跳转到不同的页面 
跳转的方式有两种,服务端跳转和客户端跳转

举栗:
1.在web目录下准备两个页面
success.html

<div style="color:green">login success</div>

fail.html

<div style="color:red">login fail</div>

2.服务端跳转
在Servlet中进行服务端跳转的方式:

request.getRequestDispatcher("success.html").forward(request, response);
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class LoginServlet extends HttpServlet {
 
    private static final long serialVersionUID = 1L;
 
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        String name = request.getParameter("name");
        String password = request.getParameter("password");
 
        if ("admin".equals(name) && "123".equals(password)) {
            request.getRequestDispatcher("success.html").forward(request, response);
        }
 
    }
 
}

使用服务端跳转,可以看到浏览器的地址依然是/login 路径,不会变成success.html

3.客户端跳转
在Servlet中进行客户端跳转的方式:

response.sendRedirect("fail.html");
        if ("admin".equals(name) && "123".equals(password)) {
            request.getRequestDispatcher("success.html").forward(request, response);
        }
        else{
            response.sendRedirect("fail.html");
        }

可以观察到,浏览器地址发生了变化

图示

有些需要随Tomcat启动的初始化代码,比如校验数据库的完整性等
但是Servlet的生命周期是在用户访问浏览器对应的路径时开始的,如果没有用户的第一次访问,就不会执行相关代码。
这时候就需要Servlet实现自启动,即伴随着Tomcat的启动,自动启动初始化
在初始化方法init()中,就可以进行一些业务代码的工作了

配置方式:
在web.xml中,增加

<load-on-startup>10</load-on-startup>

中间数字的取值范围是1~99,表示启动顺序,数字越小优先级越高

举栗:
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
 
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
        <load-on-startup>10</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
     
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>LoginServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>   
 
</web-app>

HelloServlet.java

import java.io.IOException;
import java.util.Date;
 
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HelloServlet extends HttpServlet{
     
    public void init(ServletConfig config){
        System.out.println("init of Hello Servlet");
    }
 
    public void doGet(HttpServletRequest request, HttpServletResponse response){
         
        try {
            response.getWriter().println("<h1>Hello Servlet!</h1>");
            response.getWriter().println(new Date().toLocaleString());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
     
}

效果:在Tomcat完全启动之前,就打印了init of HelloServlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值