JavaWeb中獲取表單資訊和cookie的使用
阿新 • • 發佈:2019-02-14
獲取表單資訊
先建立一個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/>
密 碼:<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 整個瀏覽器 可以儲存300個
2.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);
}
}