天天看點

解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法

作者:華為雲開發者聯盟

本文分享自華為雲社群《淺談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類型           
解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法
解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法
解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法
//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();
}           
解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法

通過标簽中的name擷取value一維數組

getParameterNames()擷取所有key值

如果html頁面的資料有更改,浏覽器清除過緩存在執行。           
解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法
//通過标簽中的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);
    }
}           
解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法

轉發html頁面

//既可以轉發Servlet類也可以轉發html(屬于Web容器當中合法的資源都可以轉發)
request.getRequestDispatcher("/share.html").forward(request,response);           
解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法

常用方法

//擷取用戶端的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");           
解析關于Tomcat Servlet-request的擷取請求參數及幾種常用方法

點選下方,第一時間了解華為雲新鮮技術~

華為雲部落格_大資料部落格_AI部落格_雲計算部落格_開發者中心-華為雲

#華為雲開發者聯盟#

繼續閱讀