ServletContext
1.它是一种域对象
2.一个Web应用只有一个ServletContext对象
3.服务器启动时对象就创建了,当服务器关闭时对象才销毁
功能方法:
(1)获取ServletContext对象
ServletContext sc = servletconfig.getServletContext();
由于GenericServlet类中定义了方法getServletContext(),
而HttpServlet继承自GenericServlet,
我们自定义的Servlet类继承自HttpServlet,所以类中也有
方法getServletContext()
ServletContext sc = this.getServletContext();
(2) 域功能,内部有map,可以存取数据
servletContext.setAttribute("name","Tom");//保存数据
servletContext.setAttribute("name","Jack");//替换数据
servletContext.getAttribute("name");//获取数据
servletContext.removeAttribute("name");//删除数据
Enumeration en = servletContext.getAttributeNames();//获取所有的属性名
保存在ServletContext中的数据是被当前Web应用中的所有资源共享
(3)访问当前的web应用的资源
//根据文件相对路径得到绝对路径
String getRealPath(String path)
G:\apache-tomcat-6\webapps\day6_2\WEB-INF\web.xml
//将得到的资源包装成一个InputStream
InputStream is = servletContext.getResourceAsStream("/WEB-INF/web.xml");
(4)获取在web.xml中配置的初始化参数(不属于一个Servlet)
<context-param>
<param-name>school</param-name>
<param-value>rjxy</param-value>
</context-param>
<context-param>
<param-name>major</param-name>
<param-value>java</param-value>
</context-param>
String value = this.getInitParameter("name");
————————————————————————————————————————
response:
是service()方法的参数,类型是HttpServletResponse.
在客户端发出请求时,服务器都会创建一个新的response对象,把它传给service()方法。
response对象用来完成对客户端的响应。
它有4种功能:
设置响应头信息
发送状态码
设置响应正文
重定向
1、 response设置响应正文,通过两种流发送到客户端的:
PrintWriter out = response.getWriter();//字符流
ServletOutputStream out = response.getOutputStream();//字节流 比如下载一个图片时
通过字符流发送响应时,要注意字符编码问题。
response.getWriter()默认编码为ISO-8859-1,不支持中文。
把字符集设置为UTF-8, response.setcharacterEncoding("UTF-8");
这样发送到客户端的就是UTF-8编码的内容。
浏览器一般默认的解码字符集为GB2312或者GBK。
比如“安阳” UTF-8编码为6个字节,而GB2312编码为4个字节。
解决乱码: response.setContentType("text/html;charset=UTF-8");
缓冲区
response.getWriter()有缓冲区,大小为8KB,如果响应数据没有达到8KB,
所有数据都暂时存放在缓冲区中,不会立刻发送到客户端。当Servlet执行完毕后,
服务器才会将缓冲区中的数据发送到客户端。如果想立刻发送到客户端,
调用response.flushBuffer()方法手动刷新缓冲区。
2、设置响应头信息
告诉客户端浏览器一些关于响应的信息,比如内容编码,内容长度等。
//3秒钟自动跳转到某个主页
response.setHeader("Refresh","3;URL=http://www.aynu.edu.cn");
//跳转到本项目内主页
response.setHeader("Refresh", "3;URL=/day7/index.jsp");
3、设置状态码
response.setStatus(200);
response.setStatus(404);
4、重定向
本来浏览器访问的是A地址,服务器却通知浏览器去访问B地址,即再次发送一个新的请求。
//重定向(到项目外的资源)
response.sendRedirect("http://www.aynu.edu.cn");
//重定向(到项目内的资源)
response.sendRedirect("/day7/FServlet");