📄 servlet_jd0801a.txt~
字号:
2) Http协议的无状态性 Http协议是一种无状态的协议,当客户端向服务器端发起一次请求,服务器不会来区分和保存客户端的状态信息,这样可以提供服务器的处理能力和提高response的响应灵敏度。 缺点: 服务器端无法跟踪和保存客户端的 状态信息2、跟踪和保存客户端状态信息的技术 1) Cookie a) Cookie是在服务器端构造的对象,在Cookie中可以以文本形式保存客户端的状态信息(如登陆的用户名和密码),并将Cookie对象放置在response中返回并保存在客户端。 b) 在服务器端生成Cookie的方式 //构造Cookie对象 Cookie cookie = new Cookie("cookieName","cookieValue"); cookieName --> String类型 cookieValue --> String类型 如: Cookie cookie = new Cookie("username","jack"); //设置Cookie保存在客户端的存活期 cookie.setMaxAge(int time); time --> 存活期的时间(单位:秒) 默认为-1 time > 0: Cookie被保存在客户端的某个 文件中 time < 0: Cookie被保存在客户端的 浏览器中 time = 0: 表示删除浏览器中同名的Cookie 注意: 当time > 0时,若超过了Cookie的 存活期,那么在下次请求时,浏览器就 不会把Cookie放置在request中发送到 服务器端。 当time < 0时,在关闭浏览器后, 那么保存在浏览器中Cookie就 不存在了。 //将Cookie放置在response中并返回 到客户端 response.addCookie(cookie); b) 在服务器端获得从客户端发送过来 所有Cookie Cookie[] cookies = request.getCookies(); c) Cookie功能可以被浏览器屏蔽 目的: 解决安全隐患问题 在Cookie被屏蔽后,服务器端返回的Cookie不会被浏览器接受,浏览器也不会把保存在客户端的Cookie放在request中发送到服务器端。String time = request.getParameter("time"); int second = 0; if(time.equals("one day")){ second = 24*3600; } 2) session(会话)-->属于HttpSession类型 a) 获得session的方式 (a1)HttpSession session = request.getSession(); 当第一次调用此方法时,容器会先去获得从客户端发送过来的Cookie,从中取出jsessionid,若没有取到的话,容器会构造一个新的session对象并为之分配一个唯一的jsessionid,并将这个session对象放置在由容器构造的HashMap中(jsessionid,session对象引用),同时紧接着构造一个Cookie对象来存放jsessionid的值,格式如下:Cookie cookie = new Cookie("JSESSIONID","jsessionid的值");将cookie放置在response中返回到客户端保存在当前浏览器中。response.addCookie(cookie); 当第二次去调用此方法时,容器就可以从客户端发送来的Cookie中获得jsessionid,然后从HashMap中取出原来构造的session对象。 (a2) HttpSession session = request.getSession (boolean creat); 若create=true: 同上 若create=false: 当容器获取不到Cookie中的jsessionid时,它不会去构造一个新的session对象,此方法直接返回null。 b) session的使用方式 b1) 往session中存放信息 session.setAttribute(key,value); b2) 从session中获得信息 Object o = session.getAttribute(key); b3) 将session中的信息删除 session.removeAttribute(key); c) session的特点 c1) 一个浏览器对应一个session(一个 浏览器中存放当前session的jsessionid) c2) 在同一个浏览器中, 一个session可以跨越多个请求,多个请求 可以共享同一个session。若多个请求要 共享的信息可以放置在session中。 c3) session是依赖于Cookie的,若Cookie 功能被屏蔽后,那么session就不好用了。 使用建议: 将信息尽量存放在request中, 存放在session中的信息会占有系统资源的。 d) session的失效 d1) session.invalidate() d2) 关闭浏览器后,session在30分钟后 自动失效 d3) 让用户不在页面上作任何操作,默认 也是在30分钟后失效 d4) 在web.xml中设置失效时间 <session-config> <session-timeout>time(分钟)</session-timeout> </session-config> 所谓失效:容器会将session对象从HashMap中 删除 e) 存放信息的四种范围 applicationScope: --> 对应于ServletContext (针对整个Web应用,可以跨越多个session) sessionScope: --> 对应于session (可以跨越多个request) requestScope: --> 对应于request (可以跨越多个page) pageScope: --> 对应于PageContext (一个页面或者一个Servlet范围)3、Cookie和session的比较 1) 两者都是用来跟踪和保存客户端 的状态信息的 2) Cookie是在服务器端创建,在客户端保存 session是在服务器端创建,在服务端保存 3) Cookie中只能存放String类型,而session 中可以存放Object类型。 4) session是依赖于Cookie的,jsessionid 还是存放在Cookie中保存在客户端的。 3) URL重写 a) 功能: 解决Cookie被浏览器屏蔽的问题 b) URL重写的方式: String newURL = response.encodeURL(oldURL); 或者 String newURL = response.encodeRedirctURL(oldURL); c) newURL的格式: newURL = oldURL;jsessionid=***** 注: a) 当客户端以newURL向服务器发起请求后,容器会从newURL中获得jsessionid,然后根据jsessionid从由容器维护的HashMap中找到对应的session对象。 b) 只要一个地方的URL重写后,那么 其它地方的URL都要重写,目的就是 将jsessionid维护下来,将其发送 到服务器端。 第六章 过滤器1、过滤器 功能: 对客户端的请求进行过滤,它位于客户端和服务器端资源的中间。2、过滤器采用预先装载,和Servlet一样,由容器管理其生命周期,在整个生命周期中实例只有一个,init()、destroy()调用一次,doFilter()被调用多次。3、多个过滤器形成一个过滤器链,调用次序和web.xml中过滤器的描述顺序一致。4、包装器(wrapper) 功能:对request或者response重新包装,可以 修改request或者response中信息。 第七章 监听器1、监听器 监听器也采用预先装载,它的生命周期也受容器管理,只有一个实例,在Web应用卸载或停止Web Server时实例被容器销毁。 ~/.mozilla/firefox/ zy3z6dpk.default/cookies.txt ls -al .bashrchttp://localhost:8080/examples/servlet/SurveyServlet?name=skiing&level=1&years=15request.getRequestURL()-->http://localhost:8080/examples/servlet/SurveyServletrequest.getQueryString()-->name=skiing&level=1&years=15requsst.getContextPath()-->/examplesHttpServletRequest request;LoginServlet:request.setAttribute("user", user);ShowUserServlet:User user = (User)request.getAttribute("user"); servlet_jd0801a(web project) http://localhost:8080 --> 定位WebServer /servlet_jd0801a --> 定位Web应用 /basic/first.html --> 定位html src/com.briup.basic/FirstServlet.java extends HttpServlet /SecondServlet.java extends GenericServlet /ImageServlet.java /com.briup.form/RegisterServlet.java url: /form/register /LoginServlet.java url: /form/login /FindAllUserServlet.java url: /form/findall /DeleteUserServlet.java url: /form/delete /com.briup.life/InitServlet.java url: /life/init com.briup.resource /DispatchServlet.java url: /resource/dispath /Dispatch2Servlet.java url: /resource/dispath2 src/com.briup.status/CookieServlet.java url: /status/cookie /SessionServlet.java url: /status/session /Session2Servlet.java url: /status/session2 /UserLoginServlet.java url:/status/userlogin /SuccessServlet.java url:/status/success /ListServlet.java url:/status/list src/com.briup.filter/EncodeFilter.java implements Filter /EncodeServlet.java url: /filter/encode /LoginFilter.java src/com.briup.listener/Listener.java /ListenerServlet.java url: /listener/test implements 6个接口 WebRoot/status/login.html /userLogin.htmlurl: /basic/imagehttp://localhost:8080 -->定位WebServer/servlet_jd0801a -->定位Web应用/basic/first --> 定位Servlet(FirstServlet) http://localhost:8089/servlet_jd0801a/basic/firsthttp://localhost:8080/servlet_jd0801a-->contextPath(定位Web应用)/form/register-->servletPath(定位Servlet)http://localhost:8089/servlet_jd0801a/form/register.htmlGET /servlet_jd0801a/form/register?username=www&password=444444444&gender=male&age=3432&city=beijing&hobby=football&msn=dddd&description=dfdsfsdf&Submit=%E6%8F%90%E4%BA%A4 HTTP/1.1http://localhost:8089/servlet_jd0801a/basic/register.html提交表单后:http://localhost:8089/servlet_jd0801a/basic/registerhttp://localhost:8089/servlet_jd0801a/form/form/registerpublic class GenericServlet{ private ServletConfig config =null; public void init(ServletConfig config){ this.config = config; } public ServletConfig getServletConfig(){ return config; }}http://localhost:8089/servlet_jd0801a/resource/dispatch2http://localhost:8088/servlet_jd0711/status/welcomehttp://localhost:8088/servlet_jd0711/status/login.htmlhttp://localhost:8088/servlet_jd0711/status/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -