Set-Cookie:对Cookie通过名称=值的方式进行设置,这些值在用户下次访问的时候会被使用,其中名值对可以设置多个。
domain:指定该Cookie是用户访问的哪个网站返回的
path:指Cookie在这个网址下面的路径
(1)新建 Cookie
Cookie cik = new Cookie("name",value);
//设置cookie的生存期是必须的,如果不设置或者设置为0,则此cookie是瞬时的,只保存在本机的内存中,而不会在硬盘上
cik.setMaxAge(秒);
(2)设置 Cookie,在响应中加入cookie
cik.setPath("/test/test2"); //可选
response.addCookie(cik);
(3)读取Cookie,通过request读取cookie
Cookie[] cks = request.getCookies();
for(int i=0;i<cks.length;i++)
{
Cookie temp = cks[i];
if("name".equals(temp.getName()))
{
String value = temp.getValue();
}
}
(4)删除 Cookie
ck.setMaxAge(0);
好处:保存数据,方便用户操作
坏处:能够保存的数据很少,字符格式,不超过4kb;受浏览器本身影响,不一定能够一直有效。
⑧HttpSession(interface)是在服务器端保存数据最常见的方式。
Session:会话,(进行某活动连续的)一段时间,使用该对象可以完成一定的操作。会话信息的范围仅限于当前Web应用程序(
ServletContext
),因此存储在一个上下文中的信息在另一个上下文中不是直接可见的。
Ⅰ.Hibernate中Session和Servlet中HttpSession的区别
Hibernate中Session对象:主要作用是数据库连接、数据库操作
Servlet中HttpSession对象:
(1)帮助服务器,识别不同的浏览器
(2)帮助服务器传递数据到不同的Servlet或JSP页面
(3)能够人工控制连续的时间段的长短。
Ⅱ.HttpSession 对象的常用方法:
(1)创建
HttpSession session = request.getSession(true);
要求服务器端重新创建一个session对象
HttpSession session = request.getSession(false);
不需要服务器端新建session对象,只需要从已有的session中取一个
HttpSession session = request.getSession();
没有要求,由服务器自动分配
(2)识别浏览器
//随机生成一个不重复的id,随着响应发送给浏览器,绑定在浏览器中,每次浏览器请求,都会把该id返回并与服务器端的id对比
String id = session.getId();
(3)传递数据
//把数据存入session中
session.setAttribute("name",object);
//在其他Servlet或jsp页面中取出数据
Object obj = session.getAttribute("name");
一般情况下,需要先判断是否为空,再取值
(4)设置有效时间
一个session对象默认有30分钟的有效时间
//设置单个session对象的最长有效时间
session.setMaxInactiveInterval(60*60*24秒);
//设置整个工程中所有session的有效时间
<session-config>
<session-timeout>20000</session-timeout>
</session-config>
(5)清除数据
session.removeAttribute("name");
(6)设置Session失效或钝化
session.invalidate();
例如:
Session类似储物柜,最主要作用就是存取数据
寝室的储物柜:
(1)一人一个
(2)能够存取东西
(3)一般的一个柜子一把钥匙
(4)特殊情况,可以给柜子贴封条
(5)有时候柜子可能两个人或N个人共用
⑨ServletContext(interface)
⑴ServletContext的定义
⑵ServletContext对象能够访问web项目的初始化参数、存储在ServletContext中的对象、web项目中的资源文件、日志;ServletContext就是Servlet容器,提供的方法可以在同一个web应用下的所有Servlet中使用。
⑩ServletConfig(interface)
ServletConfig封装了web.xml文件中的配置信息,可以在每个servlet的初始化方法中得到并且使用该对象。
4. Java EE中关于Servlet类的层次结构
Servlet(interface)(接口,规定了基础的客户端、网络、服务器端程序开发的基本方法,银行系统、军用导弹系统,不局限于特定网络)
|
GenericServlet(abstract)(抽象的实现类,定义一般的、与协议无关的servlet)
|
HttpServlet(abstract)(在Internet网络中,实现了HTTP协议的抽象类HttpServlet 的子类至少必须重写一个方法)
/ | \
自定义的Servlet具体到一个方法(GET/POST)提交的请求(普通类,继承于HttpServlet)
Java EE技术架构
5.过滤器(Filter)
①过滤器:是一个可插拔的Web组件,从Servlet 2.3之后出现,提供了一个接口,用于开发Servlet中的过滤器---Filter,是一个独立的程序,由一段Java代码和一段配置信息组成。通过不同规格的滤网,在过滤过程中,这些滤网可以组合使用。我们在 Servlet 中,可以通过实现Filter接口,创建不同规格的滤网,再通过web.xml文件配置,把上述多个过滤器组合在一起。
与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序档案中。但是与其他web应用程序组件不同的是,过滤器是“链”在容器的处理过程中。这就意味着它们会在Servlet处理器之前访问一个进入的请求,并且在触发的响应信息返回到客户端前访问这些响应信息,这种访问使得过滤器可以检查并修改请求和响应的内容。
上图的Servlet Engine、JSP Engine分别代表各自的引擎
上图为filter作用的示意图
②Filter过滤器的生命周期
(1)实例化:由Tomcat调用过滤器类的构造方法,创建对象在服务器启动时创建
(2)初始化:由Tomcat调用过滤器对象中的init(XXXXConfig)
(3)过滤:由Tomcat调用doFilter(request,response)
(4)销毁:destroy()
③Filter 的创建过程
(1)创建普通类,实现javax.servlet.Filter接口
(2)在doFilter()方法中截取request/response对象,进行请求或响应的过滤
(3)在web.xml文件中进行配置,使它能够在整个web工程中生效。剩下的都交给服务器。
④过滤器过滤条件的配置:
(1)过滤服务器上所有的资源
<filter-mapping>
<filter-name>charSet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(2)过滤制定类型的文件
<filter-mapping>
<filter-name>charSet</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>charSet</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
(3)过滤指定的目录
<filter-mapping>
<filter-name>charSet</filter-name>
<url-pattern>/folder/*</url-pattern>
</filter-mapping>
(4)过滤指定的Servlet
<filter-mapping>
<filter-name>loginFilter</filter-name>
<servlet-name>loginServlet</servlet-name>
</filter-mapping>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
⑤过滤器的通用功能
⑴拦截请求头:安全认证、日志
⑵数据转换:加密、解密
⑶抢占特殊资源的服务:缓存
⑥filter的接口
⑴javax.servlet.Filter
⑵javax.servlet.FilterChain
⑶javax.servlet.FilterConfig
⑦过滤字符编码的实例代码
其中的filterChain.doFilter(request,response);表示跳出前一个filter,继续到另一个filter中执行。
6.事件监听器(Listener)
①什么是事件监听器
⑴支持ServletContext、HttpSession(since v2.3)及ServletRequest(since v2.4)中状态改变的事件通知;
⑵实现了一个或多个servlet事件监听器接口的类型
⑶控制ServletContext、HttpSession(since v2.3)及ServletRequest(since v2.4)中的生命周期。
②监听器组成: (1)监听器本身 Listener (2)监听器触发事件 Event
③监听器主要使用在JavaSwing、JavaScript、Servlet中。在Servlet中,监听器主要针对有限的几个对象——作用域对象(这些对象都能在一定的有效时间内,保存数据,供其他Servlet或jsp页面使用)如:ServletContext、HttpSession、ServletRequest
④事件介绍
⑴事件是Java中的一个重要的概念,指某个代码运行过程中的一个状态:如HttpSession创建、属性值的改变等都可以用事件来描述。
⑵事件原型:java.util.EventObject
⑶事件监听程序是当事件发生后发现并处理的程序,实现接口java.util.EventListener
⑤各种事件对应的监听器接口
更具体的对应关系如下图
⑥使用事件及监听器的步骤
⑴编写一个类,实现某监听器接口(具体由所要监听的事件类型决定)
⑵在web.xml中注册监听器
<listener>
<listener-class>具体的类路径</listener-class>
</listener>
⑦Servlet API中给这些对象提供了监听器,主要监听以下内容:
(1)监听生命周期事件
//新建一个session,新建的session状态就是激活状态
HttpSession session =request.getSession(true);
//改变当前session对象的状态,变为钝化状态
session.invalidate();
//监听 session对象的激活和钝化
javax.servlet.http.HttpSessionActivationListener
//通知创建了一个会话
javax.servlet.http.HttpSessionListener
sessionCreated(HttpSessionEvent se)
//通知某个会话即将无效
sessionDestroyed(HttpSessionEvent se)
(2)监听属性改变事件
//监听用户登录,前提是用户在登录的时候创建新的session对象
7.Servlet处理请求和响应
Servlet是完全用Java代码编写的一个文件,编译过程和Java代码一样,但具体运行是由web服务器控制。客户端访问服务器上哪个Servlet,服务器就加载运行哪个Servlet的字节码来生成结果。
8.web.xml介绍
①Web.xml是web项目的核心,任何一个web项目都必须有这样的配置文件,通过这个配置文件,所有的服务器Tomcat、JBoss、WebLogic、GlassFish等都要通过web.xml来了解一个web项目的相关信息。该文件中能够配置很多的内容,其中包括servlet,能够为servlet配置名称、类路径、访问路径,可以通过访问路径在地址栏中通过URL访问到某个包下面的某个servlet类。
②Servlet的配置