request獲取引數通用格式和資料共享
阿新 • • 發佈:2020-12-16
技術標籤:java
1. 四種通用的獲取請求資料方法getParameter
1.1通過getParamter(鍵名)來獲取引數值 get和post請求通用
package cn.sc;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
@WebServlet( "/test3")
public class test3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通過getParamter(鍵名)來獲取引數值 get和post請求通用
String username = request.getParameter("username");
String hobby = request.getParameter("hobby");
System.out.println("愛好是:"+hobby);
System.out.println(username);
}
JavaWeb程式碼
<!DOCTYPE html>
<html lang="en">
<head >
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="test3" method="post">
使用者名稱<input type="text" placeholder="請輸入使用者名稱" name="username"/><br/>
密碼<input type="password" placeholder="請輸入密碼" name="pwd">
<input type="checkbox" value="cll" name="hobby">123456
<input type="checkbox" value="ckl" name="hobby">123457
<input type="submit" value="登陸"/>
</form>
</body>
</html>
結果為
1.2通過鍵名獲取所有的引數
System.out.println("-------------通過鍵名獲取所有的引數--------------");
// request.getParameterValues 適用於 一個鍵名 有多個引數
String[] hobies = request.getParameterValues("hoby");
for (String hoby1 : hobies) {
System.out.println(hoby1);
}
結果為
1.3request.getParamyterNames() 獲取訪問該servlet的所有的 鍵名
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()){
String name = parameterNames.nextElement();
// System.out.println(name);
String value = request.getParameter(name);
System.out.println(name+"+++"+value);
}
結果為
1.4通過map集合列舉所有鍵名和值
Map<String, String[]> pm = request.getParameterMap();
Set<String> keySet = pm.keySet();
for (String key : keySet) {
String[] values = pm.get(key);
for (String value : values) {
System.out.println(key+"----"+value);
}
}
結果為
2解決request獲取引數的中文亂碼問題
我們在1.1方法中,username文字框若輸入中文,則會出現亂碼情況例如
我們也可以解決這些中文亂碼,在下面位置中加入紅框中的程式碼。
3、Request請求轉發
是一個在伺服器內部的資源跳轉的方式,例如我們在世紀開發中,需要些不同的servlet,每個人完成不同的功能,當我們訪問aservlet實現部分功能後需要跳轉到一個新的bservlet裡面,這就是資源跳轉。
舉個例子
package cn.sc;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test1")
public class test1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我的貂,蟬在哪裡");
//1.獲取request的請求轉發器,內部引數為轉發的路徑
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/test2");
//2.呼叫轉發器物件,傳入引數request和response
requestDispatcher.forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
跳轉到test2
package cn.sc;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test2")
public class test2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("千軍萬馬一將在,探囊取物有何難");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
結果為