本文分享自華為雲社群《淺談Tomcat之Servlet-request擷取請求參數及常用方法-雲社群-華為雲》,作者:QGS。
//擷取Map集合中所有的key
Enumeration<String> getParameterNames();
//擷取Map
Map<String, String[]> getParameterMap();
//根據key擷取Map集合中的vale (常用**)
String[] getParameterValues(String s);
//擷取value一維數組的第一個元素 (常用**)
String getParameter(String name);
浏覽器向伺服器送出的是String類型
//getParameterNames()擷取所有key值
Enumeration<String> keys = request.getParameterNames();
while (keys.hasMoreElements()){
String key = keys.nextElement();
System.out.print("key: "+key +" ");
//getParameterValues(key) 、據key擷取Map集合中的vale
String[] Values = request.getParameterValues(key);
if (Values.length>1){
for (String value : Values) {
System.out.print("value:"+value+" ");
}
}else {
System.out.print(Values[0]);
}
System.out.println();
}
通過标簽中的name擷取value一維數組
getParameterNames()擷取所有key值
如果html頁面的資料有更改,浏覽器清除過緩存在執行。
//通過标簽中的name擷取value一維數組
String[] usernames = request.getParameterValues("username");
String[] pwds = request.getParameterValues("pwd");
String[] hobbies = request.getParameterValues("hobby");
for (String username : usernames) {
System.out.print(username);
}
System.out.println();
for (String pwd : pwds) {
System.out.print(pwd);
}
System.out.println();
for (String hobby : hobbies) {
if (hobby.isEmpty()){
System.out.println("null");
}
System.out.print(hobby);
}
System.out.println();
//擷取數組的第一個參數
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
String hobby = request.getParameter("hobby");
System.out.println("getParameter :"+username+" "+pwd+" "+hobby);
getParameter擷取數組的第一個參數
//擷取數組的第一個參數
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
String hobby = request.getParameter("hobby");
請求域對象
Request又稱“請求域”
應用域對象ServletContext(Servlet上下文對象)、
當使用者的共享資料很少修改操作并且資料量少的時候,使用ServletContext能夠提升程式的執行效率(應用域綁定資料,看作将資料放到Cache當中,使用者通路時直接從Cache中提取,減少IO等操作)。
應用域對象ServletContext的操作方法(類似Map集合的操作)
//向域綁定資料
setAttribute(String name , Object obj)
//從域擷取資料,根據name(key)擷取資料
Object getAttribute(String name)
//移除資料,根據name(key)
removeAttribute(String name)
請求域對象
請求域比應用域的範圍小, 占用資源小,生命周期短,請求域對象隻在一次請求内有效。
請求域對象ServletContext的操作方法(類似Map集合的操作)
//向域綁定資料
setAttribute(String name , Object obj)
//從域擷取資料,根據name(key)擷取資料
Object getAttribute(String name)
//移除資料,根據name(key)
removeAttribute(String name)
案例
//擷取系統目前時間
Date nowTime =new Date();
//向request域 中綁定資料
request.setAttribute("NowTime",nowTime);
//從request域 擷取資料
Object obj = request.getAttribute("NowTime");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timeStr = sdf.format((Date)obj);
out.print("目前時間: "+ timeStr);
Servlet轉發機制
轉發servlet類
public class ServletA extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用Servlet轉發機制。執行ServletA後,跳轉至ServletB,調用請求轉發器,将request,response參數傳遞給另一個HttpServlet子類
request.getRequestDispatcher("/servletB").forward(request,response);
}
}
public class ServletB extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//擷取系統目前時間
Date nowTime =new Date();
//向request域 中綁定資料
request.setAttribute("NowTime",nowTime);
//從request域 擷取資料
Object obj = request.getAttribute("NowTime");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timeStr = sdf.format((Date)obj);
out.print("目前時間: "+ timeStr);
}
}
轉發html頁面
//既可以轉發Servlet類也可以轉發html(屬于Web容器當中合法的資源都可以轉發)
request.getRequestDispatcher("/share.html").forward(request,response);
常用方法
//擷取用戶端的IP位址
String remoteAddr = request.getRemoteAddr();
//擷取遠端的使用者
String remoteUser = request.getRemoteUser();
//擷取遠端的主機IP
String remoteHost = request.getRemoteHost();
//擷取遠端的的端口
int remotePort = request.getRemotePort();
//擷取主機服務名
String serverName = request.getServerName();
//擷取服務路徑(項目名稱)
String servletPath = request.getServletPath();
//擷取服務端口
int serverPort = request.getServerPort();
//擷取Servlet上下文 或者this.getServletContext();
ServletContext servletContext = request.getServletContext();
//指定字元集(解決不同字元集亂碼問題)
response.setCharacterEncoding("utf-8");
點選下方,第一時間了解華為雲新鮮技術~
華為雲部落格_大資料部落格_AI部落格_雲計算部落格_開發者中心-華為雲
#華為雲開發者聯盟#