表單中獲取資料及cookie的一些方法
一:從表單中獲取資料
public class Demo01 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); //防止請求過來的資料亂碼(解決post請求亂碼) request.setCharacterEncoding("UTF-8"); //獲取表單請求過來的引數 //傳入的引數 就是表單中 name標籤 String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println(username+" "+password);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
二:利用beanuitls封裝一個物件
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"); //利用beanuitls直接將請求的引數封裝成一個物件 //引數2 從請求中獲取的引數的map集合 //注意:1.使用的實體類物件 必須符合javabean規範 // 2.實體類的成員變數 要跟獲取的引數一樣 // 3.實體類的成員變數名 和 name標籤名要相同 User user=new User(); try { BeanUtils.populate(user, request.getParameterMap()); System.out.println(user); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void fun4(HttpServletRequest request) { //將獲取的引數 封裝成一個物件 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"); //放入物件中 User user =new User(username, password, sex, hobby, city); System.out.println(user); } private void fun3(HttpServletRequest request) { //獲取引數的map集合 Map<String, String[]> map = request.getParameterMap(); for (String key : map.keySet()) { String[] values = map.get(key); for (String value : values) { System.out.println(key+" = "+value); } } } private void fun2(HttpServletRequest request) { //獲取引數的所有name Enumeration<String> names = request.getParameterNames(); while (names.hasMoreElements()) { System.out.println(names.nextElement()); } } private void fun1(HttpServletRequest request) { 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"); System.out.println(username); System.out.println(password); for (String string : hobby) { System.out.println(string); } System.out.println(city); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }
}
三:request域物件 作用範圍 只在一次請求中有效
public class Demo03 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/hyml;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); //獲取字元流 PrintWriter writer = response.getWriter(); request.setAttribute("feifei", "pang"); //請求包含(一次請求 並且兩個頁面的響應都會返回給瀏覽器) //獲取轉發器 RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04"); //包含方法 dispatcher.include(request, response); //響應回瀏覽器 writer.write("123"); System.out.println("是demo03"); } private void fun2(HttpServletResponse response) throws IOException { //測試請求重定向(兩次請求 超出request的範圍) response.sendRedirect("/sh-web-03/demo04"); } private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //測試域物件的使用範圍 //請求轉發(一次請求) //注意 最終響應回瀏覽器的內容是 轉發到的頁面的響應 //在request域中儲存值 request.setAttribute("feifei", "pang"); //使用request物件 進行請求轉發 //獲取請求轉發器 RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04"); dispatcher.forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }
}
四:會話技術
-
指的是客戶端(使用者/瀏覽器)和服務端(servlet)進行的互動
-
一次會話 只有當關閉瀏覽器時 這次會話算結束
-
1.客戶端技術(瀏覽器實現) Cookie
-
Cookie使用流程
-
1.當用戶第一次訪問伺服器時 伺服器可以建立一個Cookie出來
-
並且新增到響應中 響應回用戶(瀏覽器)
-
2.當瀏覽器 接收到 攜帶了Cookie的響應後 會將cookie儲存到本地檔案
-
3.當用戶再次訪問伺服器時 會攜帶著cookie一起去訪問 這時服務端拿到cookie可以使用
-
4.預設當瀏覽器關閉時 會話結束 瀏覽器銷燬儲存cookie(可以設定cookie存活時間 時間到 才銷燬)
-
Cookie的使用
-
1.每個網站最多可以儲存20個cookie到瀏覽器中
-
2.每個cookie最多隻能儲存4kb(只能儲存小資料)
-
3.每個瀏覽器最多可以儲存300個cookie
-
4.cookie中不能儲存中文
-
設定cookie的存活時間
-
setMaxAge 以秒為單位
-
正值 cookie到時間被銷燬
-
負值 瀏覽器不會儲存cookie 會話結束 直接銷燬cookie
-
0值 立即刪除cookie
-
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) { //找出剛才儲存的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 cookie=new Cookie("lastTime", System.currentTimeMillis()+""); //設定存活時間 cookie.setMaxAge(60*1); //設定儲存路徑 // /表示工程下所有的servlet類都能拿到這個cookie // /sh-web-03/servlet表示只有訪問路徑是servlet下的類才能獲取到cookie cookie.setPath("/sh-web-03/servlet"); //儲存到響應中 response.addCookie(cookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}