ServletConfig

  <只对当前Servlet有效>

  (1)在Web容器初始化Servlet实例时,都会为这个Servlet准备一个唯一的ServletConfig实例(俗称Servlet配置对象)。

  (2)Web容器会从部署文件中读出该Servlet类的初始化参数,并设置到ServletConfig实例中,然后再把这个ServletConfig实例传递给该Servlet实例的init()方法。


ServletContext

  <整个Web应用有效>

  (1)一个Web应用程序中的所有Servlet都共享一个ServletContext上下文实例。因此,ServletContexts实例也称application对象

  (2)可以通过setAttribute(String name,Object obj)、getAttribute(String name)方法来存放和获取属性。

  (3)可以通过getInitParameter(String name)方法来获取指定名称的Web应用上下文初始化参数的值。

  例如:

ServletContext context=this.getServletContext();
String appName=context.getInitParameter("appName");

Servlet的线程安全问题

  Servlet默认时以多线程模式执行的。当多个客户同时并发请求一个Servlet时,容器将启动多个线程调用的请求方法。

  请求处理方法中的局部变量时安全,而成员变量和共享数据时不安全的。解决线程安全的问题由如下常用方法:

  (1)synchornized

     但要尽可缩小同步代码的范围,不要直接再doGet()、doPost()等请求处理方法使用同步,这将严重影响性能。

  (2)尽量少使用成员变量和共享数据

      Servlet类尽量不要定义成员变量;

      尽量少在ServletContext、HttpSession中保存会被修改的数据。

      单例模式处理共享数据。


会话跟踪

  Cookie  

    Cookie是在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应消息头中附带传送给浏览器的一段数据。

    Servlet规范规定用于会话跟踪的名字必须是JSESSIONID。

    Servlet API中提供了一个javax.servlet.http.Cookie类来封装Cookie信息,提供一些常用的方法:

      public Cookie(String name,String Value);

      getName()、setValue()、setMaxAge()、getMaxAge()、setPath()、getPath()、setDomain()以及getDomain()。

    如果要将一个构造好的Cookie实例的信息添加到消息头中,可以使用HttpServletResponse接口中提供的addCookie()方法。

  Session

    一个客户端在Web服务器端对应一个各自的HttpSession实例。

    Web容器并不在每个客户端第一次访问时就自动创建HttpSession实例。只有客户端访问某个编写了创建HttpSession实例代码的Servlet时,才会创建一个HttpSession实例。

    HttpServletRequest接口提供了两个方法来创建HttpSession实例:

       public HttpSession getSession();

       public HttpSession getSession(boolean flag);

    常用方法:setAttribute(String name,Object obj)、getAttribute(String name)、invalidate()等。

   URL重写

     将会话ID添加到URL接回,以标识该会话,这样服务器就可以从请求URL中取出会话ID,并用它查找匹配的回话了。

     HttpServletResponse接口中定义了两个用于自动完成URL重写的方法:

    (1) 用于对超链接和form表单的action属性的URL进行自动URL重写

          public String encodeURL(String url);

    (2)用于对要传递给HttpServletResponse.sendRedirect()方法的URL进行自动URL重写

          public String encodeRedirectURL(String url);


过滤器

    Filter可以改变一个request和修改一个reponse。

    Filter不是一个Servlet,它不能产生一个response,它能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response。

    Filter可以完成验证客户是否来可信的网络,可以对客户提交的数据进行重新编码,可以验证客户是否登陆等。

    所有过滤器都必须实现javax.servlet.Filter接口,这个接口包含三个方法,分别是:doFilter()、init()和destroy()。

    doFilter()方法为大多数过滤器的关键部分,每当调用一个过滤器时,都要执行该方法。通过调用FilterChain对象的doFilter()方法时,可以激活下一个相关的过滤器。


Servlet监听器

    Servlet API提供了以下几个监听器接口:

      (1)ServletContextListener:监听Web应用的启动和销毁事件。

      (2)ServletContextAttributeListener:监听Web应用上下文中的属性改变事件。

      (3)ServletRequestListener:用于监听请求的创建和销毁。

      (4)ServletRequestAttributeListener:监听请求中的属性改变。

      (5)HttpSessionListener:监听会话的创建和销毁事件。

      (6)HttpSessionActivationListrener:监听会话的激活和钝化的事件。

      (7)HttpSessionAttributeListener:监听会话中的属性改变事件。

      (8)HttpSessionBindingListener:会话值绑定监听器。不用在web.xml中设定的Listener。


Servlet 3.0 ——新增标签支持

    简化Servlet、Filter和Listener的申明。使得web.xml部署描述文件从该版本开始不在时必选的了。

    web.xml的顶层标签<web-app>中有一个metadata-compete属性,如果设置为true,则容器的部署只依赖web.xml的配置,会忽略所有标注。

    @WebServlet

      声明Servlet。

      常用属性:name(<servlet-name>)、

           value(等价urlPatterns属性)

           urlPatterns(<url-pattern>)

             loadOnStartup(<load-on-startup>)

           initParams(<init-param>)

           asyncSupported(<async-supported>)

           dscription(<desciption>)

           displayName(<display-name>)

    @WebInitParam

      通常不单独使用,配合@WebServlet或者@WebFilter使用,为Servlet或者过滤器指定初始化参数。

      常用属性:name(<param-name>)、

           value(<param-value>)、

                description(<description>)。

    例如:

@WebServlet(name="servlet",urlPatterns={"/servlet1"},initParams={@WebInitParam(name="usrname",value="rekent")} )  
public class servlet extends HttpServlet{
}

    @WebFilter

    申明过滤器。

    @WebListener

    声明监听器,必须实现接口

    @MultipartConfig

    辅助Servlet3.0中HttpServletResquest提供的对上传文件的支持。

JSP/Servlet Web 学习笔记 DayFive的更多相关文章

  1. JSP/Servlet Web 学习笔记 DayOne

    JSP概述 1)JSP是一种动态网页技术标准,它是在传统的页面HTML文件中插入Java程序段和JSP标记(tag),从而形成JSP文件(*.jsp),也称JSP页面. 2)JSP容器是一个支持JSP ...

  2. JSP/Servlet Web 学习笔记 DayFour

    Servlet概述 Servelt是使用Java Servlet应用程序接口及相关类和方法的Java程序. Servlet是用Java编写的Server端程序,它与协议和平台无关.Servlet运行于 ...

  3. JSP/Servlet Web 学习笔记 DayTwo

    JSP指令 a)page指令 定义JSP文件中的全局属性.一个JSP页面可以包含多个page指令.除了Import以外,其他page指令定义的属性/值只能出现一次. 其详细语法为: <%page ...

  4. JSP/Servlet Web 学习笔记 DaySix —— EL表达式

    1)EL从scope中得到参数时可以自动转换类型,因此对于类型转换的限制更加宽松. 2)使用EL表达式,可以简化变量和对象的访问. 3)EL表达式必须以 ${XXXX} 来表示. 4)EL提供点(.) ...

  5. JSP/Servlet Web 学习笔记 DayThree

    JSP内置对象 使用JSP语法可以存取这些内置对象来执行JSP网页的Servlet环境相互作用.内置对象其实是由特定的Java类所产生的.每一种内置对象都映射到一个特定的Java类或者端口,在服务器运 ...

  6. JSP/Servlet Web 学习笔记 DayThree —— 实现一个登陆小界面

    项目说明 利用JSP.HTML.JS实现了一个简易的登陆系统.根据前两天的所学,实现了如下功能: a)用户名.密码验证(不基于数据库,只做一个简单的表单数据获取并验证) b)页面访问次数统计 c)验证 ...

  7. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. Java Web学习笔记之---JSP

    Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...

  9. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

随机推荐

  1. Vuex基础-Mutation

    借助官网的一张图,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.不可以直接对其进行赋值改变.需要注意的是,mutations只能做一些同步的操作. ​​​ 代码结构: ​ ...

  2. matlab linux下无界面运行

    今日做吸引域的仿真,由于需要遍历100*100*100的空间,需要的时间比较长,发现程序没运行一段时间,就会出现Out of memory的错误,而且出错的部分在于截取figure内部图片的部分. 开 ...

  3. 旧文备份:VC中嵌入NASM编写的汇编函数

    在公司开发的RT下没法使用C库,并且替代库函数没有几个,需要用到setjmp和longjmp函数,没办法,只能自己想办法了,上sourceforge淘换到一个小日本的工程,提供这两个函数的替代源码,名 ...

  4. PHP调试小错误汇总

    1.中文显示乱码 解决:加上header('Content-type:text'); 2.Unable to find the wrapper "https 解决:到php.ini中把ext ...

  5. 通过ip地址访问同一局域网下已经启动的angular项目

    通常tomcat启动的项目同一局域网下我们都可以访问.angular启动的前台项目别人怎么访问,一直不懂,后来知道启动命令加个参数就行了 首先查看本机ip 第二步,启动命令里加上--host 本机ip ...

  6. jquery-ui-custom autocomplete

    //jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8& ...

  7. 基于Xtrabackup恢复单个innodb表

      Preface       We all know that Xtrabackup is a backup tool of percona for innodb or Xtradb.It's us ...

  8. Apache Maven(二):构建生命周期

    Maven 约定的目录结构 我要遵循Maven已经约定好的目录结构,才能让maven在自动构建过程中找到对应的资源进行构建处理.以下是maven约定的目录结构: 项目名称 |-- pom.xml :M ...

  9. C语言数组篇(四)二维数组

      二维数组声明: ][] ={{,,},{,,}; //两行 三列         二维数组在声明的时候可以不写行,但一定要写列 ] = {{,},{,,},{}}; //未声明的地方自动补零 二维 ...

  10. mybatis <forEach>标签的使用

    MyBatis<forEach>标签的使用 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis.当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名 ...