关于Servlet与JSP

javax.servlet.HttpServlet

image

 

Servlet的生命过程:

  1. 容器启动时,加载并实例化Servlet;
  2. 当浏览器首次发送request请求时,调用Servlet的init方法;
  3. 服务阶段,根据请求的方式,service()去决定调用deGet()还是doPost();
  4. 当资源紧缺或容器关闭时,调用Destroy方法;

image

 

关于页面定向的问题:

  • response.sendRedirect(url)  相当于客户端再发一个到url的请求;
  • request.getRequestDispatcher("url").forward(req,resp) 只是在服务器端进行资源跳转访问,而客户端不知道,所以url展示不变;
  • resonpse.getWriter().write(str)  相当于新建一个资源,如果是form提交,则直接到新页面展示该资源;如果是ajax请求,则str为返回的内容;

 

关于response.setContentType()设置:

普通文本

text/plain

HTML代码

text/html

XML代码

text/xml

javascript代码

text/javascript

json application/json
   
参考:纠结于ajax开发中 response的contentType 问题

 

关于JSP模型体系:

 image

image

参考:Servlets和JSP Pages最佳实践

 

关于过滤器与拦截器:

  1. filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
  2. filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
  3. Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
  4. Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤
import javax.servlet.*;

public class AuthFilter implements Filter {

    public void destroy() {
        System.out.println("authfilter destroy");
    }

    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        //System.out.println("authfilter dofilter");
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)resp;
        HttpSession session = request.getSession(false);
        
        if(session == null || (String)session.getAttribute("admin") == null ||!((String)session.getAttribute("admin")).equals("admin")) {
            System.out.println(request.getContextPath());
            response.sendRedirect( request.getContextPath() + "/AdminLogin.jsp");
            return;
        }
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {
        System.out.println("authfilter init");
    }

}

配置filter,此时,它会过滤所有/admin/下的请求,包括样式文件、图片、css等等,所有授权拦截需要慎重

    <filter>
        <filter-name>AuthFilter</filter-name>
        <filter-class>
            com.bjsxt.shopping.util.filter.AuthFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>AuthFilter</filter-name>
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
    <!-- 演示要过滤多个url -->
    <filter-mapping>
        <filter-name>AuthFilter</filter-name>
        <url-pattern>/other/*</url-pattern>
    </filter-mapping>

 

其它参考:

posted @ 2013-04-08 01:26  寻梦丄天涯  阅读(235)  评论(0编辑  收藏  举报