博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet简介
阅读量:6249 次
发布时间:2019-06-22

本文共 2270 字,大约阅读时间需要 7 分钟。

Tomcat容器等级

Container > Engine > Host > Servlet > Context:Web工程

1013480-20190330001155481-328233352.png

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的生命周期(只有一个对象)

1013480-20190330001251685-1352952891.png

1. 判断servlet实例是否存在(若存在,跳到3)2. 装载Servlet类(ClassLoader)并创建实例对象3. 初始化init(ServletConfig),只被调用一次4. 处理请求service(),http请求下自动调用doGet或doPost5. 销毁destroy()
// 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");

转载于:https://www.cnblogs.com/mabaoqing/p/10624956.html

你可能感兴趣的文章
NavMesh名字、层索引、层值之间的转换
查看>>
Painter 12安装教程
查看>>
Android-WizardPager
查看>>
ossim
查看>>
Android应用程序注冊广播接收器(registerReceiver)的过程分析
查看>>
【iOS】单例模式
查看>>
记第五届山东省ACM程序设计比赛——遗憾并非遗憾
查看>>
插入三维对象
查看>>
理解统计信息(2/6):直方图
查看>>
Hibernate学习笔记之EHCache的配置
查看>>
Oracle导入程序Imp的使用详解
查看>>
C#学习笔记(七):智能编译器
查看>>
Openflow协议规范
查看>>
struts2支持的结果处理类型
查看>>
11.2.3 Redis的启动停止
查看>>
如何验证cname,MX,spf记录是否生效?
查看>>
Centos系统mysql 忘记root用户的密码
查看>>
uva:10700 - Camel trading(贪婪)
查看>>
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
查看>>
随笔1
查看>>