重定向与转发
package com.cdc.test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="Servlet1",urlPatterns="/servlet1")
public class Servlet1 extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
String name=request.getParameter("uname");
String password=request.getParameter("password");
request.getSession().setAttribute("uname",name);
if(name.equals("cdc")&&password.equals("cdc")){
/****转向到本应用下的一个jsp页面**/
//req.getRequestDispatcher("/welcome.jsp").forward(req, resp);
/**转向到本应用下的一个servlet***/
//request.getRequestDispatcher("/servlet2").forward(request, response);
/**转向到本应用下的一个文件***/
//request.getRequestDispatcher("/xin.txt").forward(request, response);
/**转向到本应用下的WEB-INF文件夹里面的一个文件***/
request.getRequestDispatcher("./WEB-INF/xin.txt").forward(request, response);
}else{
/**重定向到其它应用里面的一个jsp页面**/
//response.sendRedirect("http://192.168.0.115:8080/gouwuche/suc.jsp");
//response.sendRedirect("http://baidu.com");
/**重定向到本应用里面的一个jsp页面**/
//response.sendRedirect("welcome.jsp");
/***重定向到本应用里面的一个servlet**/
response.sendRedirect("servlet2");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
/****
* 重定向:首先服务器收到浏览器客户端请求之后,服务器发送新的链接到客户端浏览器,
* 浏览器接收到新的链接之后又重新请求收到的链接地址,
* 在整个过程中完成之后在客户端浏览器看来是发生了一次跳转,
* 其实是客户端浏览器请求了两次而已,所以在浏览器的地址栏里网络地址自然就会改变成新的连接。
* 在此过程中共请求了两次服务器。在浏览器的地址栏可以看到两次的地址是有变化的。
* 只是简单的让用户访问一个新的链接,用户原来请求里面的内容,在新的链接里面就得不到了。
* 重定向是在客户端完成的,速度慢.可以在不同的服务器下完成,也可以在同一台机器上完成.
*
* **/
/***
* 转发:服务器接收到客户端的请求之后,服务器把控制权交到另一个JSP页面手里,
* 新的JSP页面接收到请求之后根据情况是继续转交控制权或者显示页面由自己决定,
* 到最后显示页面的整个过程就是一个页面跳转过程,在这个过程中,
* 服务器可以把请求的数据在经过的页面进行传递,而不会担心数据的丢失.
* 转发是用户请求一次可能经过N个JSP页面由返回到用户浏览器中,是一次请求多次处理的过程.
* 因为用户只请求了一次,所以在整个跳转过程中链接地址是没有改变的,在浏览器的地址栏就可以看到.
* 转发在服务器端完成的,速度快.必须是在同一台服务器下完成.
* request.getRequestDispatcher("/success.jsp").forward(request,response);
* getRequestDispatcher()方法的参数必须以“/”开始,“/”表示本Web应用程序的根目录。
* **/
}
Servlet2.java
package com.cdc.test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="Servlet2",urlPatterns="/servlet2")
public class Servlet2 extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="servlet1" method="post">
帐号:<input name="uname" type="text" style="width: 153px; "><br>
密码:<input name="password" type="password" style="width: 153px; "><br>
<input type="submit" value="提交">
</form>
</body>
</html>
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'welcome.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String name=request.getParameter("uname");
System.out.print(name);
%>
<%=(String)session.getAttribute("uname")%>登陆成功!<br>
<a href="index.jsp">主页面</a>
</body>
</html>
welcome2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'welcome.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String name=request.getParameter("uname");
System.out.print("获得的名字="+name);
%>
<%=(String)session.getAttribute("uname")%>登陆成功!<br>
<a href="index.jsp">主页面</a>
</body>
</html>
访问http://localhost:8080/zxyzf,当用户名和密码都为cdc时,转向到某个页面,否则重定向到一个页面。