1.servlet中的服务器内部跳转和客户端重定向
服务器内部跳转:
String url = "/hello.html";
request.getRequestDispatcher(url).forward(request, response);
特点:需要使用request对象来完成,不会改变浏览器地址栏。
客户端重定向:
String url = "hello.html";
response.sendRedirect(url);
特点:
使用response对象完成,浏览器会发出新请求,即产生新的request和response对象,会改变浏览器地址栏。
2.服务器内置对象
request—类型为HttpServletRequest
session—类型为HttpSession
application—类型为ServletContext
其中request直接作为doget和dopost的参数传递,session可通过request对象获得
HttpSession session = request.getSession();
application可通过request,session或ServletConfig对象获得,且为同一个
request.getServletContext();
this.getServletContext();
request.getSession().getServletContext();
this.getServletConfig().getServletContext();
request在每次客户端发出请求,服务器就会创建一个新的request对象,存取数据只能在一次请求之内起作用。
session在getSession方法第一次调用时创建,如果之前创建过,拿到此session,如果没有,则创建一个。并发送cookie,其中包含jsessionid,确保此次会话访问同一个session。
application在启动服务器时创建,在关闭服务器时销毁,每个项目运行期间只有同一个application对象
3.客户追踪技术
分为cookie和URL重写
//创建cookie对象
Cookie c1 = new Cookie("name","tom");
Cookie c2 = new Cookie("msg","hello");
//设置cookie的有效时间
c1.setMaxAge(60*60*24*365);
c2.setMaxAge(60*60*24*365*10);
//把cookie放到response里面
response.addCookie(c1);
response.addCookie(c2);
浏览器访问会将该网址的cookie发送给服务器,可通过取值完成信息验证,自动登录。
URL重写:
String url = response.encodeURL("url");
重写后:
<a href="TestServlet;jsessionid=5480EF9016295A73DC56731A2F123246">
4.过滤器
过滤器类需要实现javax.Servlet.Filter接口。其中有三个方法:init–在这个过滤器服务创建时调用,初始化;destory–在该过滤器对象被销毁时调用;doFilter–当拦截到请求时调用该方法,完成信息验证。特别记住在其方法最后要FilterChain.doFilter(req,res)来将请求下发,下一层过滤或访问Servlert。
使用注解或在web.xml中配置filter
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.briup.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第一种 精确匹配
<url-pattern>/test_servlet</url-pattern>
表示此拦截器只会拦截/test_servlet这一个路径
第二种 扩展名匹配
<url-pattern>*.html</url-pattern>
表示此拦截器只会拦截后缀名是.html的路径
第三种 路径匹配
<url-pattern>/test/*</url-pattern>
表示此拦截器拦截/test路径下的所有资源
第四种 匹配任意的url
<url-pattern>/*</url-pattern>
过滤器会按照web.xml的配置的顺序由上到下执行,如果使用注解配置,会按首字母排序。
5.监听器
监听器共有8种接口,分为三类:
1.监听request,session,application的创建和销毁分别为
ServletRequestListener
HttpSessionLister
ServletContextListener
2.监听request,session,application三个对象中的属性变化,分别为ServletRequestAttributeListener
HttpSessionAttributeListener
ServletContextAttributeListener
通过HttpSessionBindingEvent类型来获取键值对来获取属性添加,删除,修改的属性名和属性值
3.监听session对象中存放的其他对象,监听的是放置对象本身。
在web.xml中配置
<listener>
<listener-class>listener.TestListener</listener-class>
</listener>