// 1
ServletContext:容器,放置全局变量
setAtribute()
getAttribute()
// 2
ServletConfig:一个servlet的配置
getInitParameter(”名称”)
// 3
HttpServletRequest:封装的所有的请求
getParameterValue(”名称”)
getParameterValues(”称”)
getSession();
getAttribute(” 名称”);
getRequestDispatch(”a.jsp”).forward(request,response)
// 4
HttpServletResponse:响应
getOut();
sendRedirect(””)
//5
HttpSession:一个用户多个页面共享同一变量
setAttribute(””,””)
说明:如果将JSP或Servlet设置成单线程工作模式,会导致每个请求创建一个Servlet实例,这种实践将导致严重的性能问题(服务器的内存压力很大,还会导致频繁的垃圾回收),所以通常情况下并不会这么做。
// 获取方式
getServletConfig();
// 功能
// getServletName(); //获取servlet的名称,也就是我们在web.xml中配置的servlet-name
// getServletContext(); //获取ServletContext对象
// getInitParameter(String); //获取在servlet中初始化参数的值。这里注意与全局初始化参数的区分。这个获取的只是在该servlet下的初始化参数
// getInitParameterNames(); //获取在Servlet中所有初始化参数的名字,也就是key值,可以通过key值,来找到各个初始化参数的value值
// 获取方式
getServletContext();
// 功能
// tomcat为每个web项目都创建一个ServletContext实例,tomcat在启动时创建,服务器关闭时销毁
// 在一个web项目中共享数据,管理web项目资源,为整个web配置公共信息等,
// 通俗点讲,就是一个web项目,就存在一个ServletContext实例,每个Servlet读可以访问到它。
// request就是将请求文本封装而成的对象,所以通过request能获得请求文本中的所有内容,请求头、请求体、请求行 。
// 请求转发
// 特点:浏览器中url不会改变,也就是浏览器不知道服务器做了什么,是服务器帮我们跳转页面的,并且在转发后的页面,能够继续使用原先的request,因为是原先的request,所以request域中的属性都可以继续获取到。
request.getRequestDispatcher(String path).forward(request,response);
// 重定向(页面跳转)
// 方式一:手动方案
response.setStatus(302); //状态码302就代表重定向
response.setHeader("location","http://www.baidu.com");
// 方式二:使用封装好的方法
response.sendRedirect("http://www.baidu.com");
特点:服务器告诉浏览器要跳转的页面,是浏览器主动去跳转的页面,浏览器知道,也浏览器的地址栏中url会变,是浏览器重新发起一个请求到另外一个页面,所以request是重新发起的,跟请求转发不一样。
// 注:response.sendRedirect(path)的用法;
// 第一种:使用了"/"开头,说明是从web站点根开始,所以需要写test01/MyServlet01
response.sendRedirect("/test01/MyServlet01");
// 第二种:没有使用"/"开头,说明是从web项目根开始,那么就无需写test01了。
response.sendRedirect("MyServlet01");
重定向没有任何局限,可以重定向web项目内的任何路径,也可以访问别的web项目中的路径,并且这里就用"/"区分开来,如果使用了"/"开头,就说明我要重新开始定位了,不访问刚才的web项目,自己写项目名,如果没有使用"/"开始,那么就知道是访问刚才那个web项目下的servlet,就可以省略项目名了。就是这样来区别。
<%-- 静态包含 --%>
<%@ include file="..." %>
<%-- 动态包含 --%>
// 静态 included
// 在将jsp生成servlet类前将两个文件和在一起,生成一个java类,一起运行的。所以是一家子,当中的变量名不能重名。
<%@ include file="included.htm" %>
// 动态 included
// 在运行时调用另一个页面,是两个类,是一个调用关系,在运行时动态的调用,不是一家子,可以重复变量。
// 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
// forward跳转:
// 服务器端跳转,地址栏不改变。
// 执行到跳转语句后马上执行跳转,之后的代码不再执行(跳转之前一定要释放全部资源)。
// request设置的属性在跳转后的页面仍然可以使用。
// response跳转:
// 客户端跳转,地址栏改变。
// 所有代码执行完毕后跳转。
// 跳转后页面不能使用上一个页面的request。
// 使用地址重写传递参数(response.sendRedirect("URL?参数名=参数值"))。
response.sendRedirect("跳转页面地址");
// 获取请求参数
Request.getparameter(“”)
// 获取某个jsp文件的路径
<%=application.getRealPath("aa.jsp") %>