论坛首页 入门技术论坛

Servlet资料辅导(4)

浏览 1320 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-04  


Servlet的url-pattern

url-pattern可以使用以下三种方式
1,确切路径匹配,也就是给出确定的路径 xxx/xxxx
2,模糊路径匹配,也就是指给出一部分路径,xxxx/*,他会匹配确定路径,也就是xxxx/a 或者是xxxx/b都是可以匹配的
3,扩展名匹配,也就是会匹配扩展名,只要是扩展名相同就匹配,xxx.xxx *.xx

注意:扩展名匹配和确切路径匹配不能放在一起使用,也就是不能写成 xxxx/xxxx/xxx.xx,但是可以用
*.xxx。

 

ServletRequest对象的三个返回路径的方法
getContextPath()获得应用的路径,用动态获取应用路径
getServletPath()获得Servlet路径,也就是form中的action,如果使用确切路径那么就会是这个Servlet配置的url-pattern。
getPathInfo()使用模糊路径匹配时会返回匹配模糊部分。

 

注意:在html的form表单的action中,如果使用了扩展名匹配,一定要写明/xxxxx/xxx.xx,不要写成/xxxx/*.xx,在form的action中要尽量使用绝对路径,也就是要用 应用名/xxx.xx或者应用名/xxx。

 

SingleThreadModel接口


1) 如果希望禁止多线程访问,可以让Servlet使用SingleThreadModel接口:       public class YourServlet extends HttpServlet implements SingleThreadModel{       ...       }2) 使用此接口,系统将保证不会存在多个请求线程同时访问Servlet的单个实例。但是仍然需要同步对存储在Servlet外部的类变量或共享字段的访问。3) 如Servlet频繁被访问,则Servlet访问的同步将严重影响性能(延时)。

ServletRequest对象的生命周期就是在service()方法中,除了forward(...,...)方法将这个请求对象转发给其他的Servlet。

 

Session(会话)和Cookie

Session对象用来解决客户端发送多个请求时来用户请求信息的存储问题,但是他和ServletRequest对象是不同的,他会在有需要时创建,但是他的生命周期会比请求对象要长。Session对象的生命周期也是有限制的,如果长时间的没有访问,就会销毁掉Session对象,可以通过Session对象的


setAttribute(String name, Object o) 和getAttribute(String name)来存取数据信息。Session是用户级的对象。

 

public void service(ServletRequest request,ServletResponse response){

 String user = request.getParameter("user");
        String pass = request.getParameter("pass");
 HttpSession session = request.getSession(true);//使用请求对象来创建Session
        session.setAttribute("username", user);
        session.setAttribute("passwd", pass);
}


getSession(true)就表示如果Session不存在就创建一个新的Session,并把Session的标识SessionID写到Cookie中,如果存在就是用这个Session。getSession(false)就是在Session不存在时不会创建新Session而是返回null。如果使用getSession()方法,就等同于getSession(true)。

 

注意:ServletRequest对象适用于传输大量的数据,因为其生命周期比较短,可以有效的节省内存资源。
大数据量的传输或保存不适合使用Session空间。

 

 

Cookie,是记录用户的Session信息,也可以记录用户的请求信息,也就是SessionID,来分辨哪一个用户是否登陆过。在每次登陆时,还会将Cookie发送回服务器端,Cookie是用来跟踪Session的。

 

public void service(ServletRequest request,ServletResponse response){

 

 String user = request.getParameter("user");
        String pass = request.getParameter("pass");
        Cookie userCookie = new Cookie("user", user);
        userCookie.setMaxAge(60 * 60 * 24 * 365);//设置Cookie的最大有效期,秒为单位
        Cookie passCookie = new Cookie("pass", pass);
        passCookie.setMaxAge(60 * 60 * 24 * 365);
        response.addCookie(userCookie);
        response.addCookie(passCookie);

}


HttpServletResponse类
HttpServletResponse是用来回应用户的操作的,它可以实现页面的重定向。


sendRedirect(String location),是用这个方法指定要访问的servlet,其参数是Servlet的url-pattern


如果使用了重定向,就不会保留原有的request对象。

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics