<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 獲得請求行 獲得客戶端的請求方式:`String getMethod()` 獲得請求的資源: ~~~ String getProtocol() --獲取協議版本 String getRequestURI() --獲取請求的uri StringBuffer getRequestURL() String getContextPath() ---web應用的名稱 String getQueryString() ---- get提交url地址后的參數字符串 username=zhangsan&password=123 getPathInfo方法返回請求URL中的額外路徑信息。額外路徑信息是請求URL中的位于Servlet的路徑之后和查詢參數之前的內容,它以“/”開頭。 getRemoteAddr方法 返回發出請求的客戶機的IP地址。 getRemoteHost方法 返回發出請求的客戶機的完整主機名。 getRemotePort方法 返回客戶機所使用的網絡端口號。 getLocalAddr方法 返回WEB服務器的IP地址。 getLocalName方法 返回WEB服務器的主機名 getLocale方法 返回瀏覽器端國家語言信息 ~~~ URI——用于標識(任意)一個資源,如`/news/1.html`、`c:\abc\a.txt` URL——用于標識互聯網上的一個資源,如`http://www.sina.com/news/1.html ` 所以URI包含URL 注意:request可獲得客戶機(客戶端)的一些信息 ~~~ request.getRemoteAddr() --- 獲得訪問的客戶端IP地址 ~~~ # 獲得請求頭 ~~~ long getDateHeader(String name) String getHeader(String name) Enumeration getHeaderNames() Enumeration getHeaders(String name) int getIntHeader(String name) ~~~ referer頭的作用:執行該此訪問的的來源,做防盜鏈 # 獲得請求體 請求體中的內容是通過post提交的請求參數,格式是: ~~~ username=zhangsan&password=123&hobby=football&hobby=basketball key ---------------------- value username [zhangsan] password [123] hobby [football,basketball] ~~~ 以上面參數為例,通過一下方法獲得請求參數: ~~~ String getParameter(String name) String[] getParameterValues(String name) Enumeration getParameterNames() Map<String,String[]> getParameterMap() ~~~ 注意:get請求方式的請求參數 上述的方法一樣可以獲得 解決post提交方式的亂碼:`request.setCharacterEncoding("UTF-8");` 解決get提交的方式的亂碼(每一個參數都要這樣): ~~~ parameter = new String(parameter.getBytes("iso8859-1"),"utf-8"); ~~~ post請求要注意 servlet規范:同時滿足下列條件,則請求體中的數據將被填充到Parameter集合中 1. 是一個http/https請求 2. 請求方法是post 3. 請求類型(content-Type)是application/x-www-form-urlencoded 4. Servlet調用了getParameter系列方法 # 示例 ## 根據參數名獲取值 get 方法獲取 ~~~ String name = request.getParameter("name"); String age = request.getParameter("age"); ~~~ ## 取其他信息 ~~~ //主機地址 String serverName = request.getServerName(); //端口 int port = request.getServerPort(); // http://localhost:8080/javaWeb/MyServlet 中的 /javaWeb String path = request.getContextPath(); //查詢字符串 name=jdxia&age=17 String queryString = request.getQueryString(); ~~~ ## 轉發 獲得請求轉發器----path是轉發的地址 ~~~ RequestDispatcher getRequestDispatcher(String path) ~~~ 通過轉發器對象轉發 ~~~ requestDispathcer.forward(ServletRequest request, ServletResponse response) RequestDispatcher requestDispathcer = request.getRequestDispatcher("/MyRequest"); requestDispathcer.forward(request, response); ~~~ **瀏覽器只發起一次請求** ~~~ //轉發 獲取轉發器需要參數:請求轉發給哪個資源文件處理 //這邊路徑是相對于編譯后的 RequestDispatcher dispatcher = request.getRequestDispatcher("1.html"); //發起轉發 dispatcher.forward(request, response); ~~~ ### 請求轉發的細節 forward方法用于將請求轉發到RequestDispatcher對象封裝的資源上。 如果在調用forward方法之前,在Servlet程序中寫入的部分內容已經被真正地傳送到了客戶端,forward方法將拋出IllegalStateException異常。 例,以下代碼會拋出異常: `java.lang.IllegalStateException: Cannot forward after response has been committed` ~~~ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "aaaaaa"; PrintWriter writer = response.getWriter(); writer.write(data); writer.close(); /* * 以下跳轉會導致: java.lang.IllegalStateException: Cannot forward after * response has been committed */ request.getRequestDispatcher("/message.jsp").forward(request, response); } ~~~ 雖然你不會寫出以上愚蠢的代碼,但是你會寫出如下糟糕的代碼,這是在所難免的。 ~~~ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "aaaaaa"; if(true) { request.getRequestDispatcher("/index.jsp").forward(request, response); } /* * 以下跳轉會導致: java.lang.IllegalStateException: Cannot forward after * response has been committed */ request.getRequestDispatcher("/message.jsp").forward(request, response); } ~~~ 所以要記住:**每次跳轉之后一定要return** ~~~ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "aaaaaa"; if(true) { request.getRequestDispatcher("/index.jsp").forward(request, response); return; // 每次跳轉之后一定要return } request.getRequestDispatcher("/message.jsp").forward(request, response); } ~~~ 如果在調用forward方法之前向Servlet引擎的緩沖區中寫入了內容,只要寫入到緩沖區中的內容還沒有被真正輸出到客戶端,forward方法就可以被正常執行,原來寫入到輸出緩沖區中的內容將被清空,但是,已寫入到HttpServletResponse對象中的響應頭字段信息保持有效 ~~~ // forward的細節,forward時,會清空response中的數據 public class RequestDemo7 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "aaaaaa"; response.getWriter().write(data); // 跳轉之前會把原來寫入response的數據清空 request.getRequestDispatcher("/index.jsp").forward(request, response); } ~~~ # 域對象 request對象也是一個存儲數據的區域對象,所以也具有如下方法: ~~~ setAttribute(String name, Object o) getAttribute(String name) removeAttribute(String name) ~~~ 注意: **request域的作用范圍:一次請求中** # ServletContext域與Request域生命周期 ServletContext: 創建:服務器啟動 銷毀:服務器關閉 域的作用范圍:整個web應用 request: 創建:訪問時創建request 銷毀:響應結束request銷毀 域的作用范圍:一次請求中
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看