我们实现 一个案例 :
在 query.jsp 中输入学生的名字,在数据库中查询,查询结果在 queryResult.jsp 中显示。
Servlet是控制者,作用是处理来自 JSP 页面的输入并从 JAVA BEAN中读取来自数据库的数据,再跳转到目标页面
一。使用response对象实现 跳转
1.query.jsp
<b>查询学生数据库</b>
<form action="/proj4/servlet/QueryServlet" method ="post">
请输入学生的帐号:<input type ="text" name ="account">
<input type ="submit" value="查询">
</form>
2. queryResult.jsp
查询的关键字为:<%=session.getAttribute("account") %>
3. QueryServlet.java
public class QueryServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gb2312");
String account= request.getParameter("account");
//数据库查询
request.getSession().setAttribute("account", account);
response.sendRedirect("/proj4/queryResult.jsp");
}
}
将数据放入 session ,只有这样 ,在下一个页面中才能访问到。
request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。
二。使用forward方法实现跳转
只用更改servlet中的代码
//数据库查询
request.getSession().setAttribute("account", account);
ServletContext application = this.getServletContext();
RequestDispatcher rd = application.getRequestDispatcher("/queryResult.jsp");
rd.forward(request, response);
前面 讲过,在 forward跳转中,可以保持 request中的值,而 redirect方法中不行。因此 ,我们这里还可以改成
request.setAttribute("account",account);
同时 ,在 queryResult.jsp中的代码 要改
<%=request.getAttribute("account")%>
问题,在 Servlet中,什么时候 用 redirect跳转,什么时候用 forward方法跳转。
当从页面A到 B,如果 存在大量的暂时的数据 (也就是在B显示后就不再会用到的),那么 ,为了节省 内存,我们用forward 跳转,可以避免将很多
内容 存在session 中,而导致服务 器内存过大,因为session 是在服务 器上的。