对象@4HttpServletRequest对象。
HttpServlet调用HttpResponse的有关方法,生成响应数据,用于服务器上接收浏览器发送过来的数据信息
HttpResponse一些用法
/获得浏览器的请求,得到请求信息 //得到请求的URL地址 String a=request.getRequestURL().toString(); System.out.println(a); //得到请求的数据 String b=request.getRequestURI(); System.out.println(b); //得到请求的URL地址中附带的参数 String c=request.getQueryString(); System.out.println(c); //得到来访者的IP地址 String d=request.getRemoteAddr(); System.out.println(d); //来访者的主机名 String e=request.getRemoteHost(); System.out.println(e); //来访者的端口号 int f=request.getRemotePort(); System.out.println(f); //得到请求URL地址时使用的方法(重要) String h=request.getMethod(); System.out.println(h); //获取WEB服务器的IP地址 String l=request.getLocalAddr(); System.out.println(l); //获取WEB服务器的主机名 String n=request.getLocalName(); System.out.println(n); //获取WEB服务器的端口号 int m=request.getLocalPort(); System.out.println(m); }
作用二
//获得浏览器发送过来的姓名和年龄的数据 String a=request.getParameter("name"); String b=request.getParameter("age"); String c=request.getParameter("phone"); String d=request.getParameter("QQ"); String e=request.getParameter("wexing"); System.out.println("获得浏览器发送给Servlet的数据为:"+a+"--"+b+"--"+c); //当浏览器发送的数据是同一个名称多个不同的数据 //servlet需要使用以下这个方法去接收这种数据 String[] ss=request.getParameterValues("hobby"); System.out.println(Arrays.toString(ss)); //tomcat服务器的编码格式是:ISO-8859-1 //注意:servlet获得浏览器表单发送的数据时, //获得的名称一定要和表单上文本框定义的name属性中的名称保持一致 //当浏览器发送大量数据给servlet的时候 //如果使用getParameter一个个获得,效率太慢 //使用以下方法可以节省代码,加快开发速度 Enumeration<String> e1= request.getParameterNames(); while (e1.hasMoreElements()) { //循环获得的是浏览器发给servlet的数据的名称 String name=e1.nextElement(); if (name.equals("hobby")) { String[] str=request.getParameterValues(name); System.out.println(name+":"+Arrays.toString(str)); }else { String value=request.getParameter(name); System.out.println(name+":"+value); } } //使用Map集合获得浏览器发送的所有数据 Map<String,String[]> map=request.getParameterMap(); for (Entry<String, String[]> entry : map.entrySet()) { String name=entry.getKey(); String[] values=entry.getValue(); System.out.println(name+"%"+Arrays.toString(values)); } System.out.println("运行完成"); System.out.println("http://localhost:8080/Day06-2/Servlet2?name=hubinjkf&age=23&phone=16745637856&qq=2675648967&wexing=16745679076&hobby=%E7%9C%8B%E4%B9%A6&hobby=%E7%9C%8B%E5%B0%8F%E5%AD%A6%E5%A6%B9&hobby=%E5%AD%A6%E4%B9%A0mysql"); } 作用三 请求转发
request.getRequestDispatcher("Servlet4") .forward(request, response);
请求转发和重定向区别:
重定向跳转浏览器地址会发生变化,
请求转发浏览器地址不会发生变化
重定向是两次请求,请求转发是一次请求
重定向属于浏览器跳转,请求转发属于服务器内部跳转
重定向跳转页面是不能发送数据,
请求转发是可以携带数据的
1.请求转发是在服务器完成的,重定向是在浏览器完成的
2.请求转发的速度快,重定向速度慢
3.请求转发的是同一次请求,重定向是二次不同的请求
4.请求转发地址栏没有变化,重定向地址栏有变化
5.转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成的
对象@5 Cookie对象。对象@6 session对象。
回话管理 会话>>同一个浏览器与服务器之间在一段时间多次请求称一次会话, 浏览器关闭,会话结束。 Cookie>> :的概念 Cookie的本意 Cookie是客户端技术,程序把每个用 户数据以Cookie的形式写给用户各自浏览器 Cookie
Session, 类名HttpSession
Cookie的概念
Cookie的本意是“小甜饼”,我们俗称“曲奇饼”
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。
当用户使用浏览器再去访问服务器的时候,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据。
1.一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(name)和值(value)。
2.一个web网站可以给一个web浏览器发送多个cookie,一个浏览器也可以存储多个cookie。
3.浏览器一般只允许存放300个cookie,每个网站最多存放20个cookie,每个cookie的大小限制为4kb。
4.如果创建了一个cookie,并将他发送到了浏览器,默认情况下他是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。
Session的概念
HttpSession对象 服务器为每个会话创建一个HttpSession对象 每个会话对象都有一个唯一的ID 把 用户的数据保存在相应的HttpSession对象内
Cookie对象
package com.Servlect; /** * A202020895 * 10/29 * */ import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Servlet1 */ @WebServlet("/Servlet1") public class servlect1 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public servlect1() { super(); System.out.println("servlect在运行中使用cookie访问"); // TODO Auto-generated constructor stub } @Override public void init() throws ServletException { // TODO Auto-generated method stub super.init(); System.out.println("servlectinit方法"); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter pw=response.getWriter(); //浏览器通过地址访问服务器的servelt //servlet要获得该浏览器所携带的所有cookie对象 Cookie[] cookies=request.getCookies(); if (cookies!=null) { //循环遍历每一个cookie,直到找到servlet能识别的cookie值为止 //tag,china for (int i = 0; i < cookies.length; i++) { //通过cookie中存储的数据的名称 String name=cookies[i].getName(); if ("AAA".equals(name)) { //这个cookie是服务器要找的东西,从cookie中获得中文数据需要进行解码 String value=URLDecoder.decode(cookies[i].getValue(), "UTF-8"); System.out.println(value); pw.print(value); break; } } }else { //没有cookie,说明当前浏览器以前没有访问过服务器 //创建cookie对象,存储中文数据的时候,需要对数据进行转码 Cookie cookie=new Cookie("AAA", URLEncoder.encode("bbbbbbbb", "UTF-8")); //设置浏览器退出后,cookie还能继续存在内存中的时间 cookie.setMaxAge(30); response.addCookie(cookie); pw.print("服务器给浏览器创建了一个cookie对象"); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
Session对象
package com.Servlect; /** * A202020895 * 10/29 * */ import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class Servlet2 * session */ @WebServlet("/Servlet2") public class Servlet2 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Servlet2() { super(); // TODO Auto-generated constructor stub System.out.println("session servlect2在运行中"); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter pw=response.getWriter(); //档浏览器访问服务器的servlet的时候,需要检查该浏览器的session对象是否是刚刚创建的 HttpSession session=request.getSession(); //session.isNew()判断session到值是否为空 if (session.isNew()) { //session是刚刚创建的 //浏览器是第一次访问服务器 pw.print("浏览器是第一次访问服务器"); //设置三个动态数据 session.setAttribute("text1", "一等奖学金"); session.setAttribute("name", "hug"); session.setAttribute("pw", "12345"); //删除指定的数据 //session.removeAttribute("text1"); //当session中存放大量数据的时候,如果需要全部销毁,直接干掉session对象 //session.invalidate(); }else { String info=(String) session.getAttribute("text1"); String info1=(String) session.getAttribute("name"); String info2=(String) session.getAttribute("pw"); System.out.println("浏览器不是第一次访问服务器的文件内容"); System.out.println("浏览器不是第一次访问服务器的名字"); System.out.println("浏览器不是第一次访问服务器了的密码"); System.out.println("====================================================="); pw.print("<h1>浏览器不是第一次访问服务器的文件内容<hr></h1>"+info); pw.print("<h1>浏览器不是第一次访问服务器的名字<hr></h1>"+info1); pw.print("<h1>浏览器不是第一次访问服务器了的密码<hr</h1>"+info2); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }