04 存在中文亂碼_請求轉發.重定向_路徑問題

1、客戶端請求服務器的數據有亂碼
1.get方式請求
①修改tomcat/conf/server.xml,在<Connector> 標籤中添加屬性useBodyEncodingForURI="true"
②在獲取請求數據以前,設置 request.setCharacterEncoding("utf-8");
2.post方式請求
在獲取請求數據以前,設置 request.setCharacterEncoding("utf-8");
 
2、服務器返回給客戶端的數據有亂碼
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
}

 

請求轉發

request.getRequestDispathcer("path").forward(reqeust,response);
 
請求轉發的特色:
1.地址欄沒有發生變化
2.用戶只發起了一次請求
3.請求轉發只能轉發本服務器之內的資源
4.因爲請求是同一個對象,因此能夠利用該request作servlet之間數據的傳輸
 
 

重定向

response.sendRedirect("path")
 
重定向的特色:
1.地址欄會發生改變
2.用戶發起了兩次請求
3.重定向能夠訪問服務器之外的資源
4.重定向因爲請求屢次的,因此HttpServletRequest不是同一個對象,故不能使用它傳遞數據
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //接受用戶的用戶名和密碼
        String uname = request.getParameter("uname");
        String passwd = request.getParameter("passwd");
        
        //驗證用戶名和密碼
        if(uname.equals("zhangsan") && passwd.equals("1234")){
            //去主頁操做
            //請求轉發
            request.getRequestDispatcher("index.jsp").forward(request, response);
            
        }else{
            //跳回登陸頁面,繼續登陸
            //重定向
            response.sendRedirect("login.html");
        }
  }

 

 
public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            request.setAttribute("aaa", "bbb");
            request.getRequestDispatcher("des").forward(request, response);
            
     
    }

 

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        request.setAttribute("aaa", "ccc");
        
        response.sendRedirect("dest");
        //重定向的特色:
        //1.地址欄會發生改變
        //2.用戶發起了兩次請求
        //3.重定向能夠訪問服務器之外的資源
        //4.重定向因爲請求屢次的,因此HttpServletRequest不是同一個對象,故不能使用它傳遞數據
    }

 

路徑問題
1、分析
1.找出一個url中的項目名稱
項目名稱前面的「/」是服務器地址,例:http://127.0.0.1:8080/
項目名稱後面的「/」是項目地址,例:http://127.0.0.1:8080/proejctname/
2、判斷
1.判斷一次請求行爲是誰發出的
若是是瀏覽器行爲,則表示項目名稱前面的「/」,即服務器地址
若是是服務器內部行爲,則表示項目名稱後面的「/」,即項目地址
 
1.服務器內部行爲:請求轉發
2.瀏覽器行爲:重定向、頁面中form提交、頁面中a標籤、js中經過location.href定位一個路徑
相關文章
相關標籤/搜索