Servlet简介

Posted mabaoqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet简介相关的知识,希望对你有一定的参考价值。

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简介的主要内容,如果未能解决你的问题,请参考以下文章

Servlet上

引入servlet概念

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

Servlet简介

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

servlet简介及其生命周期