天天看點

java學習路程(javaEE)之擷取表單資料、擷取參數、request域、會話技術(Cookie)

一.擷取表單資料

//設定浏覽器資料格式
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/html;charset=utf-8");
	//解決請求過來的資料亂碼
	request.setCharacterEncoding("utf-8");
	// 擷取請求過來的參數
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	System.out.println(username +" "+ password);
}
// Servlets設定
<servlet>
  	<servlet-name>demo01</servlet-name>
  	<servlet-class>com.lanou3g.Demo01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo01</servlet-name>
  	<url-pattern>/demo01</url-pattern>
  </servlet-mapping>
           

二.擷取參數

1.擷取表格中的資料

String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String[] values = request.getParameterValues("hobby");
for (String string : values) {
	System.out.println(string);
}
String city = request.getParameter("city");
           

2.擷取參數的map集合

Map<String, String[]> map =request.getParameterMap();
for (String key : map.keySet()) {
	String[] values = map.get(key);
	for (String string : values) {
		System.out.println(key +"="+ string);
	}
}
           

3.擷取參數的所有name

Enumeration<String> names =request.getParameterNames();
while(names.hasMoreElements){
	System.out.println(names.nextElement());
}
           

4.将獲得參數封裝成對象

方法一:

建立users類将參數都聲明為成員變量,放入對象中

注意:

1).使用的實體類對象 必須符合Javabean規範

2).實體類的成員變量要跟擷取的參數一樣

3).成員變量的名和name标簽的名要相同

html

<body>
    //action 要送出的位址 從8080開始填 需要帶上工程名
	<form action="/sh-web-03/demo01" method="post">
		// name标簽相當于使用request擷取參數方法的key
		賬号:<input type="text" name="username"></br>
		密碼:<input type="text" name="password"></br>
		<input type="submit" value="送出">
	</form>
</body>
           
String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String[] hobby = request.getParameterValues("hobby");
String city = request.getParameter("city"); 
// 放入對象中
Users users = new Users(username, password, sex, hobby, city);
           

方法二:利用BeanUtils直接将請求的參數分裝成對象

Users users = new Users();
try {
BeanUtils.populate(users, request.getParameterMap());
	System.out.println(users);
} catch (IllegalAccessException e) {
	e.printStackTrace();
} catch (InvocationTargetException e) {
	e.printStackTrace();
}
           

三.request 域對象

作用範圍: 隻在一次請求中有效

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
request.setAttribute("lisi", "man"); 
//直接使用request對象進行請求轉發
//擷取請求轉發器
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
dispatcher.forward(request, response);
writer.write("123");
System.out.println("我是demo03響應回浏覽器");
           

請求重定向(不用狀态碼)兩次請求超出Request範圍

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
request.setAttribute("lisi", "man"); 
response.sendRedirect("/sh-web-03/demo04");
//擷取轉發器
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
// 包含方法
dispatcher.include(request, response);
writer.write("123");
System.out.println("我是demo03響應回浏覽器");
           
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");
		// 響應回浏覽器
		response.getWriter().write("456");
		// 取出 request域中的值
		Object attribute = request.getAttribute("lisi");
		System.out.println(attribute);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
           

四.會話技術

1.含義:

指的是用戶端(使用者/浏覽器)和服務端(Servlet)進行的互動

注意:當關閉浏覽器時這次回話才會結束

用戶端技術(浏覽器實作)Cookie

2.Cookie的使用流程:

1).當使用者第一次通路伺服器時,伺服器會建立一個Cookie并且添加到響應中,響應回浏覽器

2).當浏覽器接收到攜帶Cookie的響應後,會将Cookie儲存到浏覽器的本地檔案

3).當使用者再次通路伺服器是會攜帶着Cookie一起去通路,這時服務端拿到 Cookie可以使用

4).預設浏覽器關閉 會話結束,浏覽器銷毀儲存Cookie(可設定cookie的存活時間)

3.Cookie的使用:

1).每個網站最多可以儲存20個Cookie到浏覽器中

2).每個Cookie最多4kb(隻能儲存小資料)

3).每個浏覽器最多可以儲存300個Cookie

4).Cookie中不能儲存中文

4.setMaxAge()

正值: Cookie到時間銷毀;

負值: 浏覽器不會儲存Cookie,回話結束直接銷毀 ;

0值:立即删除Cookie;

顯示上一次(最後)的登入時間

public class Demo05 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) {
				// 找出 儲存的 lastTime的cookie
				if (cookie.getName().equals("lastTime")) {
					// 擷取cookie儲存的值
					String value = cookie.getValue(); // 秒數
					// 字元串轉long型
					long time = Long.parseLong(value);
					// 轉換時間
					Date date = new Date(time);
					// 将日期對象格式化
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
					// 格式化
					String stringTime = sdf.format(date);
					// 将時間顯示到浏覽器
					response.getWriter().println(stringTime);
				}
			}
		}
		Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() +"");
		// 設定存活時間
		cookie.setMaxAge(5 * 60);
		// 設定儲存路徑
		//  / 表示工程下所有的Servlet類都能拿到這個Cookie
		//  /sh-web-03/servlet 表示隻有通路路徑是servlet下的類才能擷取到Cookie
		cookie.setPath("/sh-web-03/servlet");
		// cookie添加到響應
		response.addCookie(cookie);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
           

Servlet設定

<servlet>
  	<servlet-name>demo05</servlet-name>
  	<servlet-class>com.lanou3g.Demo05</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo05</servlet-name>
  	<url-pattern>/servlet/demo05</url-pattern>
  </servlet-mapping>