javaWeb之servlet:Request應用

Request需要掌握

Request對象

package com.kuang.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class RequestDemo01 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //查看request對象的方式
        System.out.println(request.getContextPath()); //獲得web項目路徑
        System.out.println(request.getRequestURI()); //請求的URL路徑
        //Remote 遠程
        System.out.println(request.getRemoteUser()); //獲得遠程的用戶名
        System.out.println(request.getRequestedSessionId()); //獲得SessionId;
        System.out.println(request.getServletPath()); //請求servlet的url
        System.out.println(request.getLocalAddr()); //獲得本地地址  防火牆
        System.out.println(request.getLocalName()); //獲得本地名字
        System.out.println(request.getLocalPort()); //獲得訪問的端口號

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

Request對象接收前端用戶提交的參數

1.寫前端註冊頁面

  • 表單的提交方式 get/post
  • 表單提交的位置 action:服務項目的路徑/servlet對應的請求url
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>註冊</title>
</head>
<body>


<%--
JSP的註釋
--%>


<%--
Form表單
    action:代表要提交的路徑,表單要提交到哪裏 ,可以提交到一個Servlet
        //提交到Servlet需要,獲取到Web項目的路徑下的Servlet
    method: 提交表單的方式
--%>
<h1>註冊</h1>

<form action="${pageContext.request.contextPath}/r2" method="post">

    <p>用戶名:<input type="text" name="username"></p>
    <p>密碼:<input type="password" name="password"></p>

    <p>
        <input type="submit">
        <input type="reset">
    </p>

</form>



</body>
</html>

2.寫處理前端提交信息的Servlet

  • 接收前端傳遞的控件信息, request.getParameter(“控件的name‘);
package com.kuang.servlet;


import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//處理前端提交過來的數據
public class RequestDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //通過HttpServletRequest獲取前端用戶提交的信息
        //req.getParameterValues(); 獲得前端傳遞的控件信息,通過控件的name;但是可以接受多個參數的控件,比如(多選框....)
        //req.getParameter(); 獲得前端傳遞的控件信息,通過控件的name;

        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //連接數據庫,比較數據庫中的信息是否匹配

        if (username.equals("admin")&&password.equals("1234567")){
            System.out.println("登錄成功!"); //跳轉到成功頁面
        }else {
            System.out.println("登錄失敗!"); //提示重新註冊
        }

        System.out.println(username);
        System.out.println(password);


    }
}

3.配置web.xml

  • 配置對應的XML文件

    <servlet>
        <servlet-name>RequsetDemo02</servlet-name>
        <servlet-class>com.kuang.servlet.RequestDemo02</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>RequsetDemo02</servlet-name>
        <url-pattern>/r2</url-pattern>
    </servlet-mapping>

4.提交測試

  • 檢查英文提交情況,服務器是否接收成功!
  • 提交中文,看看亂碼情況
  • 設置編碼統一,解決亂碼問題;

Request實現請求轉發

  1. 重定向:服務器告訴客戶端你應該請求另外一個地址; (地址欄會變)

    使用:resp.sendRedirect(“url”);

  2. 轉發:服務器把這個請求轉向另外一個Servlet去處理; (地址欄不會變)
    使用:RequestDispatcher ,需要使用RequestDispatcher來進行處理,我們需要獲得這個類
    //參數就是他要轉發到的頁面

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/success.jsp");
requestDispatcher.forward(req,resp);

在這裏插入圖片描述
servlet編寫:

package com.kuang.servlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class FormServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //處理亂碼
        req.setCharacterEncoding("UTF-8");
        //處理前端的請求
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        System.out.println("接收到的用戶名:"+username+"\n密碼:"+password+"\n愛好:");

        String[] hobbies = req.getParameterValues("hobby");

        for (String hobby : hobbies) {
            System.out.println(hobby);
        }

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        req.getRequestDispatcher("/success.jsp").forward(req,resp);


    }
}

register.jsp編寫:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>註冊</title>
</head>
<body>

<h1>註冊</h1>

<form action="${pageContext.request.contextPath}/register" method="post">

    <p>
        <%-- 控件必須有name屬性,因爲Servlet要通過name才能接收到用戶輸入的信息 --%>
        用戶名:<input type="text" name="username">
    </p>

    <p>
        密碼:<input type="password" name="password">
    </p>

    <p>
        愛好 :
        <input type="checkbox" name="hobby" value="girl">女孩
        <input type="checkbox" name="hobby" value="code">代碼
        <input type="checkbox" name="hobby" value="movie">電影
        <input type="checkbox" name="hobby" value="music">音樂
    </p>

    <p>
        <input type="submit" value="提交">
        <input type="reset" value="重置">
    </p>

</form>

</body>
</html>

success編寫:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1>註冊成功!</h1>


</body>
</html>

注意:
**轉發和重定向的區別 (面試常見題:筆試)

重定向:服務器告訴客戶端,你去請求另外一個地址;客戶端行爲

  • 地址欄會變

  • 不能攜帶參數

轉發:服務器自己轉發到服務器上的另一個請求; 服務器行爲

  • 地址欄不會變
  • 可以攜帶參數**
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章