1. 程式人生 > >JavaWeb中獲取表單資訊和cookie的使用

JavaWeb中獲取表單資訊和cookie的使用

獲取表單資訊

先建立一個index.html檔案.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/sh-web-servlet/demo01" method="post">
        使用者名稱:<input type="text" placeholder="使用者名稱" name="username"
/> <br/> 密&nbsp;&nbsp;&nbsp;碼:<input type="password" placeholder="密碼" name="password"/> <br/> 男<input type="radio" name="sex" value="男" checked="checked"/> 女<input type="radio" name="sex" value="女"/> <br/> <input type="checkbox"
name="hobby" value="籃球"/>籃球 <input type="checkbox" name="hobby" value="唱歌"/>唱歌 <input type="checkbox" name="hobby" value="畫畫"/>畫畫 <br/> <select name="city"> <option>---請選擇---</option> <option value="bj">北京</option> <option value
="gz">廣州</option> <option value="sh">上海</option> </select> <br/> <input type="submit" value="提交"/> </form> </body> </html> 接著再建立一個User類 public class User { // 建議屬性名 和 表單中的name一致 private String username; private String password; private String sex; private String[] hobby; private String city; public User() { super(); // TODO Auto-generated constructor stub } public User(String username, String password, String sex, String[] hobby) { super(); this.username = username; this.password = password; this.sex = sex; this.hobby = hobby; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String[] getHobby() { return hobby; } public void setHobby(String[] hobby) { this.hobby = hobby; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return "username=" + username + ", password=" + password + ", sex=" + sex + ", hobby=" + Arrays.toString(hobby) + ", city=" + city ; } } 接著再建立一個Demo01類 public class Demo01 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 設定響應編碼格式 response.setContentType("text/html;charset=UTF-8"); // 告訴伺服器 請求的內容是什麼編碼格式的 request.setCharacterEncoding("UTF-8"); // fun1(request); // fun2(request); // 把表單資料封裝到物件中 // 引數1:要封裝的物件 注意:該物件要符合javabean規範 // 引數2:Map集合 User user = new User(); Map<String, String[]> map = request.getParameterMap(); try { BeanUtils.populate(user, map); System.out.println(user); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void fun2(HttpServletRequest request) { // 利用getParameterNames()打印表單 Enumeration<String> names = request.getParameterNames(); while (names.hasMoreElements()) { String[] values = request.getParameterValues(names.nextElement()); for (String string : values) { System.out.println(string); } } } public void fun1(HttpServletRequest request) { // 獲取表單中所有提交的內容 String username = request.getParameter("username"); String password = request.getParameter("password"); String gender = request.getParameter("sex"); String[] hobby = request.getParameterValues("hobby"); String city = request.getParameter("city"); System.out.println(username + " " + password + " " + gender + " " + Arrays.toString(hobby) + " " + city); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } 注意:向複選框這種可以多選的記得要用陣列來接收,或者接收表單資訊的時候全部都用陣列來接收.
請求轉發、請求重定向、請求包含
public class Demo02 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 亂碼兩句
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");

        // 獲取字元流
        PrintWriter out = response.getWriter();

        // 給request域中 新增值
        request.setAttribute("name", "xsd");
        // 請求包含
        // 相當於把兩個頁面的響應合稱為一個響應 返回給瀏覽器
        // 請求轉發 瀏覽器只能響應一次
        request.getRequestDispatcher("/demo03").include(request, response);

        // 響應一句話
        out.write("哈哈哈");
        System.out.println("我是demo02的結尾");
    }

    public void fun2(HttpServletResponse response) throws IOException {
        // 請求重定向 檢視是否能獲取域中的值
        // 重定向是兩次請求 不能獲取到request域中值
        // 重定向既可以訪問 本地伺服器 也可以訪問非本地伺服器
//      response.setHeader("location", "/sh-web-servlet0/demo03");
//      response.setStatus(302);
        // 相當於設定響應頭
        response.sendRedirect("/sh-web-servlet0/demo03");
    }

    public void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 請求轉發 獲取轉發器
        // 請求轉發 只是伺服器內部的訪問
        //          不管你怎麼寫路徑 始終都在專案路徑下
        RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
        dispatcher.forward(request, response);
    }

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

}
public class Demo03 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("嘻嘻嘻");
        System.out.println("我是demo03");
        String string = (String)request.getAttribute("name");
        System.out.println(string);
    }

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

}
注意:Request 也是一個域物件,域物件內部就是維護一個map集合.
request域的作用範圍:一次請求當中可以獲取到域中儲存的資料.
cookie的簡單使用
會話技術:客戶端(瀏覽器)和服務端進行互動,當瀏覽器關閉的時候這次互動(會話)結束.
會話中的兩個技術
1.cookie(客戶端技術)
cookie是儲存在瀏覽器中的快取資料,當我發起一個請求請求一個servlet,進行邏輯處理,處理完成後給客戶端(瀏覽
器)一個響應,響應中攜帶著需要儲存的資訊cookie,然後讓瀏覽器儲存起來,可以是儲存在記憶體當中(結束會話 
cookie被清除),也可以儲存在硬碟中(結束會話依然存在就是個檔案),當瀏覽器再一次傳送請求的時候會攜帶著之前
儲存的cookie去訪問.
每個網站可以儲存20個cookie 整個瀏覽器 可以儲存3002.HttpSession(服務端技術)
HttpSession儲存在服務端
例子:每次傳送請求的時候在網頁上顯示上一次發起請求的時間.
public class Demo04 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        // 讀取cookie
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            // 遍歷陣列
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("lastTime")) {
                    // 取出cookie的值
                    String value = cookie.getValue();
                    // 字串轉long
                    long time = Long.parseLong(value);
                    // 轉成日期 Date
                    Date date = new Date(time);
                    // 建立一個顯示的日期格式
                    // 引數就是你想要顯示日期格式
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    // 格式化時間
                    String lastTime = dateFormat.format(date);
                    // 響應回瀏覽器
                    response.getWriter().write("上次的訪問時間: " + lastTime);
                }
            }
        }
        // 建立cookie 記錄當前的時間
        long times = System.currentTimeMillis();
        Cookie cookie = new Cookie("lastTime", String.valueOf(times));
        // 設定一下cookie的儲存路徑 工程名+配置網址路徑
        // 讀取cookie是按 請求的地址 尋找cookie的
        // 如果你配置請求路徑沒有一級目錄
        // cookie.setPath("/"); 這樣全網站所有的網址請求都能找到你這個cookie
        cookie.setPath("/sh-web-servlet03/servlet");
        // 設定cookie存活時間
        // 負值 表示瀏覽器關閉 cookie小時
        // 正值 表示 存活的時間
        // 0 表示 刪除cookie
        cookie.setMaxAge(60 * 5);
        // 把cookie新增進響應當中
        response.addCookie(cookie);
        System.out.println(String.valueOf(times));
    }

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

}