javax.servlet.http.HttpServletRequest介面-02
阿新 • • 發佈:2021-02-01
10-HttpServletRequest-02
HttpServletRequest中常用的方法 父介面中的常用方法ServletRequest - String getParameter(String name) - String[] getParameterValues(String name) - Map<String,String[]> getParameterMap() - Enumeration getParameterNames() - void setAttribute(String name,Object o) //向request範圍中儲存資料 - Object getAttribute(String name) //向request範圍中讀取物件 - void removeAttribute(String name) //刪除request範圍中的物件
HttpServletRequest是一個怎樣的範圍呢?
HttpServletRequest型別的變數通常命名為request,代表當前本次的請求,
一次請求對應一個request物件,100個請求對應100個request物件,請求範圍是極小的
request只能完成在同一次請求中的傳遞資料
- RequestDispatcher getRequestDispatcher(String path)//獲取請求轉發器,讓轉發器物件指向下一個資源 - void setCharacterEncoding(String env) 子介面中常用的方法HttpServletRequest - String getRemoteAddr()//上邊的,分類簡單放到了這裡 - String getContextPath()//獲取webapp的根路徑 - String getMethod() - String getRequestURI() - StringBuffer getRequestURL() - String getServletPath() - HttpSession getSession() - Cookie[] getCookies()
ServletContext是Servlet上下文物件,改介面中也有一下幾個方法
- Object getAttribute(String name) //從ServletContext範圍中讀取資料
- void removeAttribute(String name) //移除ServletContext範圍中的資料
- void setAttribute(String name,Object o) //向servletContext範圍中新增資料
ServletContext是怎麼樣一個範圍?
所有使用者共享的一個範圍物件,我們一般把ServletContext物件命名為:application
可見這個物件代表一個應用,一個webapp只有一個這樣的物件
ueser類,實現set(),get(),toString()方法
package com.javaweb.servlet;
public class user {
private String usercode;
private String username;
public String getUsercode() {
return usercode;
}
public void setUsercode(String usercode) {
this.usercode = usercode;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "user [usercode=" + usercode + ", username=" + username + "]";
}
}
將ueser資料存入到request物件當中,在BServlet中讀取,這裡用到轉發器,再呼叫轉發器的forward方法
AServlet:
package com.javaweb.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
user user1 = new user();
user1.setUsercode("111");
user1.setUsername("zhangsan");
//將user物件儲存在request當中
request.setAttribute("userobj", user1);
//從request範圍中取出資料
// Object obj = request.getAttribute("userobj");
// response.getWriter().print(obj);
//跳轉
//執行AServet之後,跳轉到BServlet執行,將AServlet執行和BServlet執行放到同一個請求當中
//必須使用跳轉技術【forward】
/*
* 1、獲取請求轉發器物件
* RequestDispatcher dispatcher = request.getRequestDispatcher("/b");//括號裡是下一個資源的路徑,這個轉發器指向了BServlet
* 2、呼叫請求轉發器的forward方法即可完成轉發
* dispatcher.forward(request, response);
* */
//轉發(轉發是一次請求)
request.getRequestDispatcher("/b").forward(request,response);
}
}
BServlet
package com.javaweb.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//從request範圍中取出資料
Object obj = request.getAttribute("userobj");
response.getWriter().print(obj);
}
}
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/10-HttpServletRequest-02/textRequest">測試request</a>
<br><br>
<a href="/10-HttpServletRequest-02/a">AServlet</a>
<a href="/10-HttpServletRequest-02/b">BServelt</a>
</body>
</html>
xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>textRequest</servlet-name>
<servlet-class>com.javaweb.servlet.TestRequestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>textRequest</servlet-name>
<url-pattern>/textRequest</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>b</servlet-name>
<servlet-class>com.javaweb.servlet.BServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>b</servlet-name>
<url-pattern>/b</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>a</servlet-name>
<servlet-class>com.javaweb.servlet.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>a</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
</web-app>