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目錄。
|
新聞熱點
疑難解答