servlet+重定向+轉發+數據傳遞
- 1,最簡單的servlet使用
i,寫一個類,類名以Servlet結束(不強制)
清單:src/servlet/TestServlet.java
TestServlet extends HttpServlet
override method:
//頁面form中的method以post方式發送調用該方法
doPost(HttpServletRequest req,HttpServletResponse resp)
//頁面form中的method以get方式發送調用該方法
doGet(HttpServletRequest req,HttpServletResponse resp)
ii,配置servlet
清單:/WebRoot/WEB-INF/web.xml
//配置servlet在程序中對應的類
<servlet>
//指定servlet名字,用於在servlet-mapping中進行對應
<servlet-name>test</servlet-name>
//指定servlet對應的class
<servlet-class>servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
//對應servlet名字
<servlet-name>test</servlet-name>
//在頁面的form中的action爲test時匹配該mapping(action中不需要帶'/')
<url-pattern>/test</url-pattern>
</servlet-mapping>
iii,寫界面
<form action="test" method="get/post">
//elements
<input type="submit" value="submit"/>
</form>
流程:
用戶訪問,提交請求,服務器讀取web.xml,匹配請求對應的servlet-mapping,
進而匹配servlet對應的class,根據請求執行對應的doGet/doPost,doGet/doPost中
處理完數據進行重定向或者轉發到另一個頁面。在這期間,可以進行數據傳遞。
重定向(redirect):客戶端的要求當前服務器無法達到,請求別的服務器幫助,當前服務器相當於代理
servlet中
response.sendRedirect("URL");
jsp中
<%response.sendRedirect("URL")%>
i,可以是任何一個地址,也可以是jpg,png,avi等文件
ii,改變了瀏覽器的訪問地址
轉發(forward):屬於服務端的動作,有一系列完整的客戶端請求響應動作,無需別的服務器幫助
servlet中
request.getRequestDispatcher("本工程路徑[默認爲WebRoot]").forward();
jsp中
<jsp:forward page="本工程路徑[默認爲WebRoot]"/>
i,只能是本工程的文件,不能是servlet等類
ii,不改變瀏覽器的訪問地址
數據傳遞
i,jsp的隱式對象(9個)容器
request(客戶端每一次請求都將生成一個request,請求結束request被銷燬)
servlet傳值
request.setAttribute("attName","attValue");
jsp拿值
i,<%request.getAttribute("attName")%> // 使用隱式對象拿值
ii,${attName} //使用El拿值
cookie(客戶端所攜帶的信息,由request獲得,由客戶清空信息)
servlet中拿值
request.getCookies() return Cookie[]
session(客戶端訪問服務端的整個過程[認爲是在交談所以稱爲會話],
瀏覽器關閉丟失sessionId,隨後服務將銷燬session)
servlet傳值
session.setAttribute("attName","attValue");
jsp拿值
i,session.getAttribute("attName");
ii,${attName}
application(服務器開啓對象被生成,關閉被銷燬)
application實際對應的是ServletContext
servlet傳值
this.getServletContext().setAttribute("attName","attValue");
jsp拿值
i,<%application.getAttribute("attname')%>
ii,${attName}
request,response,cookie,session和application解釋
學生和老師交談,學生問一句,老師答一句,
request表示學生問的信息
response表示老師答的信息
cookie表示學生本身攜帶的信息,例如學生的名字。
session表示整個交談都一直存在的信息,例如學生一直圍繞一道題而產生很多的問題,
那麼這道題可以理解爲session,其他的題可以理解爲request。
application表示所有學生在與老師交談中都可以拿到的信息,可以理解成在javaSE中的
static修飾後的效果,每個方法爲一個學生。每個客戶訪問都共享一個application對象。
ii,url傳值
xx.jsp?parameterName = parameterValue & parameterName1 = parameterValue1
獲得值
request.getParameter(parameterName);
(EL無法獲得參數內容)
iii,form傳值(相當於request.setAttribute("attName","attValue"))
前提:可攜帶值的元素(text,hidden,,,)帶有name屬性
servlet拿值
request.getAttribute("name");