关于Servlet与JSP
javax.servlet.HttpServlet
Servlet的生命过程:
- 容器启动时,加载并实例化Servlet;
- 当浏览器首次发送request请求时,调用Servlet的init方法;
- 服务阶段,根据请求的方式,service()去决定调用deGet()还是doPost();
- 当资源紧缺或容器关闭时,调用Destroy方法;
关于页面定向的问题:
- 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模型体系:
关于过滤器与拦截器:
- filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
- filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
- Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
- 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>