Tomcat容器等级
Container > Engine > Host > Servlet > Context:Web工程
Servlet
在服务器上运行的小程序,一个Servlet就是一个java类,可以通过 ”请求-响应“ 编程模型来访问驻留在服务器内存里的Servlet程序。Servlet可以被认为是服务器端的applet,Servlet被Web服务器加载和执行就如同applet被浏览器加载和执行一样。基本流程如下:客户端通过HTTP提出请求,Web服务器接受该请求并将其发送给Servlet,如果这个Servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它,Servlet接受该请求并处理它并向Web服务器返回应答,Web服务器将此应答发送给客户端。
配置web.xml:
name className 1 name zhangsan name /path
Servlet的生命周期(只有一个对象)
1. 判断servlet实例是否存在(若存在,跳到3)2. 装载Servlet类(ClassLoader)并创建实例对象3. 初始化init(ServletConfig),只被调用一次4. 处理请求service(),http请求下自动调用doGet或doPost5. 销毁destroy()
Cookie
// cookie文件中不允许存放中文,需要使用 java.net.URLEncoder 对其进行编码Cookie cookie = new Cookie("username", java.net.URLEncoder.encode(user.getUsername(), "utf-8"));// 在整个web工程下Cookie都有效(尽量不放在根目录下),默认为在添加Cookie的servlet或jsp及其子目录下有效,如:/servlet/cookie/...cookie.setPath("/");cookie.setMaxAge(3600);response.addCookie(cookie);// JSP中使用el表达式通过key获取value值:var cookieName = "${cookie.username.value}";// 使用 JS 的 decodeURIComponent(str) 函数对 中文cookie值 进行解码document.getElementById("username").value = decodeURIComponent("${cookie.name.value}");// 清除Cookiecookie.setMaxAge(0);response.addCookie(cookie);
Session
- 存在于服务器的内存中。
- 从打开浏览器连上服务器到关闭浏览器取消连接成为一个会话。
- 只要当前会话页面没有完全关闭,重新打开新的浏览器窗口访问同一项目资源属于同一次会话。
- 创建新的会话原有的会话仍然存在于服务器端,只不过再也没有客户端会携带它然后交与服务器校验。
- 销毁方法:invalidate();超时自动消失;重启服务器
若浏览器支持Cookie,可将SessionID存放在Cookie中:
HttpSession session = request.getSession();String sessionId = session.getId();Cookie cookie = new Cookie("JSESSIONID",sessionId);response.addCookie(cookie);
若浏览器不支持Cookie,可通过URL重写的方式设置Session(localhost不能用):
">购买
设置session的有效期:
10
ServletConfig:包含了servlet对象的初始化信息。
ServletContext:也就是application,代表当前Web应用:
ServletContext域,是一个容器
HttpServlet 的方法: public ServletContext getServletContext()
中文乱码问题:
1. request.setCharacterEncoding("utf-8"),设置字符编码格式,只对 post 方式有效。2. response.setContentType("type=text/html;chatset=utf-8")3. 万能解决办法,将原来的字符串转变成字节数组,然后重新编码。
String name = new String(request.getParameter("name").getBytes("ISO8859_1"),"utf-8");