標籤:
擷取用戶端資訊
1 編寫ClientServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("utf-8");request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();// 擷取用戶端資訊out.println("getMethod(): "+request.getMethod()+"<br/>");out.println("getRequestURL(): "+request.getRequestURL()+"<br/>");out.println("getRequestURI(): "+request.getRequestURI()+"<br/>");out.println("getProtocol(): "+request.getProtocol()+"<br/>");out.println("getQueryString(): "+request.getQueryString()+"<br/>");out.println("getRemoteAddr(): "+request.getRemoteAddr()+"<br/>");out.println("getRemoteHost(): "+request.getRemoteHost()+"<br/>");out.println("getRemotePort(): "+request.getRemotePort()+"<br/>");out.println("getServletPath(): "+request.getServletPath()+"<br/>");out.println("getContextPath(): "+request.getContextPath()+"<br/>");}
以上的方法可以發現通過使用request可以擷取servlet和servletContext的路徑。那麼在實際的開發中我們的網站的名字一般都需要進行改變。因此以後在web項目中如果使用到網站名那麼一定要使用request.getContextPath()擷取出來而不是寫死。這樣可以提高後期的維護性。
2 擷取伺服器資訊
編寫一個GetServerInfo.java
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("utf-8");request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();// 擷取用戶端資訊out.println("getLocalAddr(): " + request.getLocalAddr() + "<br/>");out.println("getLocalName(): " + request.getLocalName() + "<br/>");out.println("getLocalPort(): " + request.getLocalPort() + "<br/>");}
3 請求轉寄
- 訪問路徑
http://localhost:8080/demo1?name=jack&password=root
實現一個處理使用者請求的Demo1Servlet
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { // 擷取使用者的請求的參數 String name = request.getParameter("name"); String psw = request.getParameter("password"); // 判斷使用者輸入的資訊 if(name != null && psw != null && "jack".equals(name) && "root".equals(psw)){ // 登陸成功需要將使用者資訊傳遞給歡迎頁面 request.setAttribute("name", name); // 登陸成功將頁面轉寄到歡迎頁面 request.getRequestDispatcher("/demo2").forward(request, response); }else{ request.getRequestDispatcher("/regist.html").forward(request, response); }}
2. 編寫一個轉寄後的Demo2Servlet
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 擷取轉寄過來的資料 String name = (String) request.getAttribute("name"); out.println("歡迎光臨:"+name); } 轉寄和重新導向的區別
1. 實現方式不同轉寄 request.getRequestDispatcher("/regist.html").forward(request, response);重新導向 response.sendRedirect(“/day07/regist.html”)2. 請求次數不同轉寄只發送一次請求重新導向發送2次請求3. 地址欄變化不同轉寄地址欄不變重新導向地址欄變化4. 轉寄的時候可以通過request對象攜帶資料。Web中路徑問題
如果在web項目中需要使用路徑,如:轉寄、重新導向還有超連結等。
原則:”一切web路徑以/開始”
那麼/的路徑一定是相對路徑,那麼/到底代表哪一個相對路徑是需要智慧的。
如果該路徑是給伺服器使用的,那麼/代表當前網站的根目錄。如果該路徑是給瀏覽器使用的,那麼/代表當前Tomcat的webapps目錄。
java學習筆記—HttpServletResponse(23)