码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet简介

时间:2019-03-30 01:18:01      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:关闭   response   on()   loader   就是   img   执行   基本   有一个   

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:

<servlet>
     <servlet-name>name</servlet-name>
     <servlet-class>className</servlet-class>
     <load-on-startup>1</load-on-startup> <!-- 数字越小表示优先级别越高 -->
     <init-param>
          <param-name>name</param-name>
          <param-value>zhangsan</param-value>
     </init-param>
</servlet>
<servlet-mapping>
     <servlet-name>name</servlet-name>
     <url-pattern>/path</url-pattern>
</servlet-mapping>

Servlet的生命周期(只有一个对象)

技术图片

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

// 清除Cookie
cookie.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不能用):

<a href="<%=response.encodeURL("/SessionDemo01")%>">购买</a>

设置session的有效期:

<session-config>
    <session-timeout>10</session-timeout>
</session-config>

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");

Servlet简介

标签:关闭   response   on()   loader   就是   img   执行   基本   有一个   

原文地址:https://www.cnblogs.com/mabaoqing/p/10624956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!