Servlet-平常笔记3面试
Servlet之间的交互:信息共享和相互跳转。跨域
1)三种类型:请求转发(forward)、URL重定向(redirect)、请求包含(include)。浏览器
请求转发:session
用法:request对象.getRequestDispatcher(String path).forword(request, response);app
参数:path表示目标资源名称(就是要跳转到哪里)。spa
forward(request, response)才是跳转,不能漏。对象
URL重定向: blog
用法:response对象.sendRedirect(String path);接口
参数:path表示目标资源名称。生命周期
常见面试题:转发和URL重定向的区别。
请求转发 | URL重定向 |
不改变浏览器地址路径 | 浏览器地址改变 |
跳转先后是同一个请求,共享数据 | 跳转先后是两个不一样的请求,数据不共享 |
不能够跨域访问资源 | 能够跨域访问资源 |
能够访问WEB-INF下的资源 | 不能够访问WEB-INF下的资源 |
最终响应输出有跳转后的决定 | 最终响应输出有跳转后的决定 |
四大做用域对象从小到大分别为:pageContext、request、session、application。
名称 | 类型 | 描述 |
pageContext | PageContext | 当前JSP页面范围 |
request | HttpServletRequest | 当前请求范围,同一个请求中,有效,每次请求都是新的请求对象 |
session | HttpSession | 当前会话范围,(通常浏览器不关闭就在)同一个session中共享会话 |
application | ServletContext | 当前应用范围,Tomcat开启就建立该对象(有且只有一个),直至Tomcat关闭 |
操做:
设置共享信息:
域对象.setAttribute(String name, Object value);
获取共享信息:
Object value = 域对象.getAttribute(String name);
修改共享信息:
从新设置一个同名属性
删除共享信息:
域对象.removeAttribute(String name);
1.通常登录信息存放在Session中。
2.组件之间的数据共享存放在request中,此时只能使用请求转发。
Web容器在启动时,会建立一个ServletContext对象,当容器关闭时,对象被销毁,在整个Web生命周期中,只有该对象,表示当前的应用。
如何获取ServletContext对象:
1)若在Servlet中,使用super.getServletContext获取。 GenericServlet实现了Servlet和ServletConfig接口,而getServletContext方法就在ServletConfig接口中。
2)经过请求对象获取:
request对象.getServletContext(); Tomcat7开始支持
request对象.getSession().getServletContext();
经常使用方法:
1)String getContextPath(); 获取当前应用的上下文路径。
2)StringgetRealPath(String path); 获取资源的绝对路径。
3)全局初始化参数:
获取全局的初始化参数,就不能使用ServletConfig对象.getInitParameter来获取,而应该使用ServletContext对象.getInitParameter来获取。
在总结的最后发现,getParameter()方法和getAttribute()方法好像都能获取信息,那他们有什么区别呢?
百度了一下,他们的用途不同,前者多用于获取用户输入的信息,如表格;后者多用于开发者本身设置的用来共享的信息。