页面跳转是开发一个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