zoukankan      html  css  js  c++  java
  • 关于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>

    其它参考:

  • 相关阅读:
    FaceBook API
    CAP – Consistency, Availability, Partition Tolerance
    Hypothesis Testing
    MOSS 2007中如何添加VariationsLabelMenu来在不同语言的variation间切换?
    用Windows 2008 R2做工作机遇到的IE的安全问题
    如何使用Notepad++快速整理挤在一起的CallStack信息(将换行符作为被替换的内容)
    Managed Metadata Service介绍系列 之四
    MOSS 2007捞取ConfigDB中的数据, 得到内部名所对应的timer job的title及运行状况
    Log Parser分析IIS log的举例
    EventCache表太大, 怎么办?
  • 原文地址:https://www.cnblogs.com/huntdream/p/3006582.html
Copyright © 2011-2022 走看看