1

我有两个 JSP 页面。在第一页中,我提供了填写个人详细信息的字段,并且我已经编写了 request.getRequestDispatcher("second.jsp") 并转发了请求。但是当我在 Eclipse 中的服务器上运行“first.jsp”时,它会直接转到“second.jsp”,但在 URL 中却是 shopwing “first.jsp”。可能是什么问题?

第一个.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<br>
<h2>Enter Your Personal Details</h2>
<form action="personal.jsp" method="get">
<table>
<tr><td>Name:      </td><td>   <input type="text" name="name" /><br /><br /></td></tr>
<tr><td>Email-ID:     </td><td><input type="text" name="email" /><br /><br /></td></tr>
<tr><td>Date Of Birth:</td><td><input type="text" name="dob" /><br /><br /></td></tr>
<tr><td>Password: </td><td><input type="text" name="pass" /><br /><br /></td></tr>
<tr><td>Age: </td><td><input type="text" name="age" /><br /><br /></td></tr>
<tr><td><input type="submit" /></td></tr>
</table>
</form>
<%!
String uname=null,pass=null,email=null; 
String age=null,dob = null;
%>
<%
uname= request.getParameter("name");
session.setAttribute("username",uname);
pass= request.getParameter("pass");
session.setAttribute("password",pass);
age = request.getParameter("age");
session.setAttribute("age",age);
email = request.getParameter("email");
session.setAttribute("email",email);
dob = request.getParameter("dob");
session.setAttribute("dob",dob);
response.sendRedirect("academic.jsp");
%>
</body>
</html>

第二个.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<br>
<h2>Enter Your Academic Details</h2>
<form action="academic.jsp" method="get">
<table><tr><td>
MID:       </td><td> <input type="text" name="mid" /><br /><br /></td></tr>
<tr><td>Marks:      </td><td>   <input type="text" name="marks" /><br /><br /></td></tr>
<tr><td>Salary:     </td><td><input type="text" name="salary" /><br /><br /></td></tr>
<tr><td>Stream:</td><td><select name="stream"><option>Java</option><option>dotNET</option><option>Testing</option></select><br /><br /></td></tr>
<tr><td><input type="submit" /></td></tr>
</table>
</form>
<%
out.println(session.getAttribute("name"));
%>
</body>
</html>
4

3 回答 3

1

产生问题是因为您在 scriptlet 中直接调用了 forward 方法,这可能看起来像这样

request.getRequestDispatcher("second.jsp").forward(request, response);

通过您的问题编辑,这会产生问题:

response.sendRedirect("academic.jsp");

请注意,强烈建议不要使用 scriptlet 。

确保所有数据处理和导航都在Servlet或 MVC 框架(如 JSF 托管 bean 或 Spring MVC@Controller装饰类)提供的其他控制器类中处理。

更多信息:

于 2013-09-04T15:24:07.937 回答
1

您需要response.sendRedirect()在 url 中制作效果。

request#forward 

悄悄地将控制权传递给您的另一个资源,并且发生在服务器端,浏览器不知道它。

向前():

对于通过 getRequestDispatcher() 获得的 RequestDispatcher,ServletRequest 对象调整其路径元素和参数以匹配目标资源的路径。

发送重定向()

使用指定的重定向位置 URL 向客户端发送临时重定向响应并清除缓冲区。

突出显示 Luggis 评论,将您的业务逻辑转移到Controller并尽可能避免scriplets

虽然不推荐,但如果您想更改 URL 并仍想访问第二页中的数据,一种可能是将数据放在 session 中并在第二个 jsp 中访问。

于 2013-09-04T15:09:23.843 回答
0

实际问题在于JSP Declaration而不是 JSP Scriptlet内的first.jsp行,根据文档解释了为什么当你点击它时,它会在没有任何操作的情况下被重定向到另一个页面,并且其他人建议它不建议使用 JSP scriptlet,或者JSP 中的声明。response.sendRedirect("academic.jsp");variables and methods in JSP declarations become declarations in the JSP page’s servlet classfirst.jsp

于 2013-09-04T15:45:30.107 回答