01 10Servlet跳轉

現在的開發要求是,可以由Servlet跳轉到根目錄下保存的show.jsp頁面,而show.jsp頁面的功能很簡單,就是輸出屬性內容。
範例:定義show.jsp頁面代碼

<%@ page language="java" pageEncoding="UTF-8"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
	<base href="<%=basePath%>">

	<title>Servlet</title>
</head>
  
<body>
	<h1>request Attribute: <%=request.getAttribute("requestParam") %></h1>
	<h1>session Attribute: <%=session.getAttribute("sessionParam") %></h1>
</body>
</html>

下面最爲重要的就是如何在MyServlet裏面跳轉到show.jsp頁面。

在WEB開發之中存在有兩種跳轉模式:客戶端跳轉、服務器端跳轉。

1 客戶端跳轉

在doGet()與doPost()兩個方法上都提供有HttpServletResponse接口對象,那麼既然有了這個response對象就可以利用response對象裏面提供的sendRedirect()方法跳轉到另外的頁面。
範例:編寫MyServlet.java

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	HttpSession session = request.getSession();
	request.setAttribute("requestParam", "REQUEST ATTRIBUTE");
	session.setAttribute("sessionParam", "SESSION ATTRIBUTE");
	response.sendRedirect("show.jsp");
}

由於使用的是客戶端跳轉操作,所以頁面的地址變爲了show.jsp。但是最關鍵的問題是request屬性範圍不存在了。

2 服務器端跳轉

對於服務器端跳轉首先想到的一定是<jsp:forward>,但是遺憾的是,這屬於JSP的語法,不能夠在Servlet裏使用。

如果要想實現服務器端跳轉,必須利用ServletRequest(HttpServletRequest)提供的一個方法:
(1)取得RequestDispatcher接口對象:public RequestDispatcher getRequestDispatcher(String path)
|————在取得對象的同時必須要設置要跳轉的頁面路徑,這個路徑可以直接使用/描述根目錄;

在RequestDispatcher接口裏面定義了兩個方法:
(1)跳轉:public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
(2)包含:public void include(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
範例:實現Servlet到JSP的服務器端跳轉

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	HttpSession session = request.getSession();
	request.setAttribute("requestParam", "REQUEST ATTRIBUTE");
	session.setAttribute("sessionParam", "SESSION ATTRIBUTE");
	request.getRequestDispatcher("/show.jsp").forward(request, response);
}

之所以一直強調request屬性範圍,Servlet與JSP相比,JSP更加適合於輸出,而Servlet是由Java程序編寫的,所以適合於編寫Java代碼,那麼也就意味着在實際的開發之中,往往會由Servlet處理數據,而後會將處理好的數據交給JSP顯示,那麼這個數據只顯示一次就夠了,所以request是最好用的屬性範圍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章