Java中 操作Servlet域中的值以及会话技术 cookie
2018-03-28 20:56
477 查看
XML文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>SH-web-servlet-03</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <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> <servlet> <servlet-name>demo02</servlet-name> <servlet-class>com.lanou3g.Demo02</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo02</servlet-name> <url-pattern>/demo02</url-pattern> </servlet-mapping> <servlet> <servlet-name>demo03</servlet-name> <servlet-class>com.lanou3g.Demo03</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo03</servlet-name> <url-pattern>/demo03</url-pattern> </servlet-mapping> <servlet> <servlet-name>demo04</servlet-name> <servlet-class>com.lanou3g.Demo04</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo04</servlet-name> <url-pattern>/servlet/demo04</url-pattern> </servlet-mapping> <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> <servlet> <servlet-name>demo06</servlet-name> <servlet-class>com.lanou3g.Demo06</servlet-class> </servlet> < 4000 servlet-mapping> <servlet-name>demo06</servlet-name> <url-pattern>/servlet/demo06</url-pattern> </servlet-mapping> <servlet> <servlet-name>demo07</servlet-name> <servlet-class>com.lanou3g.Demo07</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo07</servlet-name> <url-pattern>/servlet/demo07</url-pattern> </servlet-mapping> </web-app>
将form表单上的参数传到Servlet中
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="/SH-web-servlet-03/demo01" method="post"> 用户名:<input type="text" name="username"/> <br> 密码:<input type="text" name="password"/> <br> 男<input type="radio" name="sex" value="男" checked="checked" /> <br> 女<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>北京</option> <option>天津</option> <option>上海</option> </select> <br> <input type="submit" value="提交"> </form> </body> </html>
public class Demo01 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // fun1(request, response); // fun2(request, response); // 设置响应编码格式 response.setContentType("text/html;charset=UTF-8"); // 告诉服务器 请求的内容是什么编码格式的 request.setCharacterEncoding("UTF-8"); // 把表单数据封装到对象中 // 参数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 | InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void fun2(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { // 设置响应编码格式 response.setContentType("text/html;charset=UTF-8"); // 告诉服务器 请求的内容是什么编码格式的 request.setCharacterEncoding("UTF-8"); // 利用getParameterNames()打印表格 Enumeration<String> enumeration = request.getParameterNames(); while (enumeration.hasMoreElements()) { String name = enumeration.nextElement(); // 根据name取出对应值 String[] values = request.getParameterValues(name); for (String value : values) { System.out.println(value); } } } private void fun1(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { // 设置响应编码格式 response.setContentType("text/html;charset=UTF-8"); // 告诉服务器 请求的内容是什么编码格式的 request.setCharacterEncoding("UTF-8"); // 获取表单中 所有提交的数据打印 String username = request.getParameter("username"); System.out.println(username); String password = request.getParameter("password"); System.out.println(password); String sex = request.getParameter("sex"); System.out.println(sex); // 获取复选框传递的值 String[] hobby = request.getParameterValues("hobby"); if (hobby != null) { for (String h : hobby) { System.out.println(h); } } String city = request.getParameter("city"); System.out.println(city); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
请求转发 请求重定向 请求包含 获取Servlet域中的值
/* * 请求转发 * 请求重定向 * 请求包含 * * Request 也是一个域对象 * 域对象内部就是维护了一个map集合(有添加删除获取的方法) * request域的作用范围: 一次请求当中 可以获取到域中保存的数据 */ 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"); // 给request域中 添加值 request.setAttribute("name", "xiaoming"); // 获取字符流 PrintWriter out = response.getWriter(); // 请求包含 // 相当于把两个页面的响应合成为一个响应 返回给浏览器 // 请求转发 浏览器只能响应一次数据 request.getRequestDispatcher("/demo03").include(request, response); // 响应一句话 out.write("123"); System.out.println("demo02结尾"); //fun1(request, response); //fun2(response); } private void fun2(HttpServletResponse response) throws IOException { // 请求重定向 查看是否能获取域中的值 // 重定向是两次请求 不能获取到request域中的值 // 重定向即可以访问 本地服务器 也可以访问 非本地服务器 // response.setHeader("location", "/SH-web-servlet-03/demo03"); // response.setStatus(302); // 这句和上面两句是一样的 只不过是另一种方法 response.sendRedirect("/SH-web-servlet-03/demo03"); } private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 请求转发 获取转发器 // 请求转发是一次请求 可以获取到request域中的值 // 请求转发 只是服务器内部的访问 // 不管你怎么写路径 始终都在项目路径下 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 { publ c345 ic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("456"); // 获取request域中 保存的值 String name = (String)request.getAttribute("name"); System.out.println("Demo03" + name); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
会话技术
/* * 会话技术 * 客户端(浏览器)和服务端进行交互(会话) * 当浏览器关闭的时候 这次交互(会话)结束 * 例如打电话 * 会话中有两个技术 * 1.小饼干 cookie(客户端技术) * cookie是保存在浏览器中的缓存数据 * 当我发起一个请求 请求一个Servlet 进行逻辑处理(添加一个商品进购物车) * 处理完成后 给客户端(浏览器)一个响应 * 响应中携带者记录了购买的什么商品的cookie * 让浏览器保存起来 可以是保存在内存当中(结束会话 cookie被清除) 也可以保存在硬盘中(结束会话 依然存在 相当于一个文件) * 当用浏览器再一次请求购物车的时候 * 会携带着之前保存的 cookie 去访问 * 每个网站可以保存20个cookie 整个浏览器 可以保存300个cookie * * 注意:第一次访问浏览器是不会携带cookie去访问的 因为cookie还没有产生 * 只有当第一次请求之后的响应中可以把cookie写回到浏览器中 * * 2.HttpSession(服务端技术) * HttpSession是保存在服务端中的 * * 显示上次登录的时间 * 思路: * 第一次访问的时候 利用cookie 响应到(写到)浏览器中 * 下次再访问的时候 从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) { 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 记录当前的时间 Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + ""); // 设置一下cookie的保存路径 工程名 + 配置的网址路径 // 读取cookie的时候 是按请求的地址寻找cookie的 // 如果配置请求路径没有一级目录 // 这样全网站 所有的网址请求 都能找到你这个cookie // cookie.setPath("/"); cookie.setPath("/SH-web-servlet-03/servlet"); // 设置cookie存活时间 以秒为单位 // 负值 表示 浏览器关闭 cookie消失 // 正值 表示存活的时间 // 0 表示 删除cookie cookie.setMaxAge(5 * 60); // 把cookie添加进响应当中 response.addCookie(cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
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) { 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); } } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
相关文章推荐
- Servlet 会话技术 , Session 及 Cookie 详解
- Java_乔晓松_Cookie技术--会话管理
- JavaWeb开发中的会话技术[Cookie/Session]
- Servlet操作Cookie制作工具类以及Cookie的生命周期
- java web会话跟踪技术(深入理解HTTP Session与Cookie)
- java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题。
- java中字符串操作string、stringBuffer和stringBuilder的区别以及其相关操作技术
- java servlet基本操作 以及将数据库表上传到网页的程序举例
- Java 会话技术 Session和Cookie
- Servlet(15)会话技术Cookie
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
- servlet--会话技术--cookie And session--
- Cookie&Session会话技术&Servlet三个作用域总结
- java基础-会话技术Cookie&Session
- java web会话跟踪技术(深入理解HTTP Session与Cookie)
- java web之会话技术cookie+session
- JavaWeb之会话技术Cookie&Session
- Servlet学习-会话技术cookie
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】