Fork me on GitHub

跳转

准备工作

在web目录下准备两个页面success.htmlfail.html
分别用于显示登录成功或者登录失败。
如果登录成功了,就服务端跳转到success.html;如果登录失败了,就客户端跳转到fail.html

1
2
success.html
<div style="color:green">login success</div>

1
2
fail.html
<div style="color:red">login fail</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
HelloServlet.java
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet{
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();
}
}
}

服务端跳转

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

1
request.getRequestDispatcher("success.html").forward(request, response);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LoginServlet.java
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);
}
}
}

客户端跳转

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

1
response.sendRedirect("fail.html");

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
LoginServlet.java
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);
}
else{
response.sendRedirect("fail.html");
}
}
}

服务端跳转和客户端跳转图示

1

客户端的跳转:跳转之后地址栏的信息是会变的,变为跳转之后的地址信息 。
服务器端的跳转:跳转之后的地址栏的信息不会 发生任何的改变。
(1) 在使用request属性范围时,只有服务器端跳转才能将request范围的属性保存到跳转页面;而如果是客户端的跳转,则无法进行request属性的传递
(2) 另外,如果是服务器端的跳转,则执行跳转语句时立刻进行跳转;如果使用的是客户端跳转,则是整个页面执行完之后才执行跳转的。
(3) 在Servlet中如果想要进行客户端的跳转,直接使用HttpServletResponse接口的SendRedirect()即可,但是需要注意的是,此跳转只能传递session以及application范围的属性,而无法传递request范围的属性。

响应代码

1
2
3
4
5
6
200: 表示响应成功了,比如打开页面,就会看到200响应码。
301: 表示客户端跳转,永久性的跳转。为了实现301跳转,在Servlet中应该使用如下代码: response.setStatus(301); response.setHeader("Location", "fail.html");
302: 表示客户端跳转,临时性的跳转。在Servlet的代码 实现要比301简单点,直接使用: response.sendRedirect("/listHero");
304: 表示资源未被修改。当不是第一次访问一个静态页面或者图片的时候,就会得到这么一个提示。这是服务端提示浏览器,这个资源没有发生变化,你直接使用上一次下载的就行了,不需要重新下载。这样就节约了带宽,并且浏览器的加载速度也更快。
404: 表示访问的页面不存在。
500: 表示服务端的错误。

更多代码预览:
1

Your support will encourage me to continue to create!