servlet-跳轉、初始化傳參、亂碼、解析過程

一、跳轉

  1. 轉發
    用法:req.getRequestDispatcher(“目標文件”).forward(req, resp);

  2. 重定向
    用法:resp.sendRedirect(“目標文件”);

  3. 兩者的區別
    (1)轉發不會修改地址,重定向會
    (2)轉發只有一次請求,重定向會在發一個請求到新的頁面
@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost```");
        System.out.println("正在執行...");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username + "--" + password);
        if(name.equals(username)){
            /*轉發*/
//          req.getRequestDispatcher("fail.html").forward(req, resp);
            /*重定向*/
            resp.sendRedirect("fail.html");
        }else{
//          req.getRequestDispatcher("success.html").forward(req, resp);
            resp.sendRedirect("success.html");
        }
        System.out.println("執行完畢...");
    }

二、初始化傳參

說明:需要放在servlet裏面,同時,只有這一個servlet可以取到該值,在init的時候使用ServletConfig取值
web.xml

<!--註冊 -->
  <servlet>
    <servlet-name>Hello</servlet-name> <!--servlet名字 -->
    <servlet-class>servlet.Hello</servlet-class><!--路徑 -->
    <init-param>
        <param-name>username</param-name><!--名稱 -->
        <param-value>root</param-value><!--值 -->
    </init-param>
    <init-param>
        <param-name>password</param-name>
        <param-value>123abc</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup><!--正數表示在啓動的時候自動初始化,數字表示順序,數字越大越後-->
  </servlet>

Java

    private String name;
    private String pwd;
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("Hello init```");
        name = config.getInitParameter("username");
        pwd = config.getInitParameter("password");
        System.out.println(name + "--" + pwd);
    }

三、亂碼

產生原因:編碼和解碼的方式不一致
常見的亂碼:數據庫、io、web

1.web請求亂碼

(1)get
conf->server.xml

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               URIEncoding="utf-8"/>

(2)post
java

req.setCharacterEncoding("UTF-8");

2.web響應亂碼
說明:無論是get還是post都一樣
java

resp.setContentType("text/html;charset=utf-8");

四、解析過程

解析url->定位->web.xml->檢查是否註冊->調用
這裏寫圖片描述
注:圖片來源於《servlet詳細講解》

發佈了38 篇原創文章 · 獲贊 1 · 訪問量 9423
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章