ServletContext对象:
ServletContext代表是一个Web应用的环境(上下文)对象,ServletContext对象内部封装是该Web应用的信息,ServletContext对象一个Web应用只有一个!
//ServletContext代表整个Web项目,包含了整个Web项目信息,是一个域对象!
一个Web应用有几个servlet对象?
有一个ServletContext对象(因为Web项目只有一个,所以ServletContext对象只有一个)和无数个Servlet对象!
ServletContext对象的生命周期?
创建:该Web应用被加载(服务器启动或发布Web应用(前提:服务器启动状态))
销毁:Web应用被卸载(服务器关闭,移除该Web应用)
创建ServletContext对象:
ServletContext servletContext = this.getServletContext();
配置全局Web.xml中的参数:
//需要声明在web-app标签内!
ServletContext是一个域对象:
什么是域对象?什么是域?
存储数据的区域就是域对象
ServletContext域对象的作用范围:整个web应(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)
域对象的通用的方法:
setAtrribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name);
创建Servlet类的快捷方法:
直接在包上new一个Servlet类,Web.XML中会自动生成该Servlet的信息,但是这部分信息可以自动生成,但是不可以自动删除,所以当删除Servlet类时,一定要删除Web.XML中的信息!
黑科技之代码模板示例:
package ${enclosing_package}; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ${primary_type_name} extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write(""); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
示例代码(ServletContext域对象):
package com.oracle.demo01; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取ServletContext域对象: ServletContext servCon=this.getServletContext(); //获取全局信息: String url=servCon.getInitParameter("url"); System.out.println(url); //通过相对路径获得TomCat服务器上源码的绝对路径: String PathA=servCon.getRealPath("WEB-INF/classes/A.txt"); String PathB=servCon.getRealPath("B.txt"); String PathC=servCon.getRealPath("WEB-INF/C.txt"); //D.txt是直接建在Web0904工程下的,所以不会有路径! System.out.println(PathA); System.out.println(PathB); System.out.println(PathC); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
示例代码(通过ServletContext域对象实现Servlet对象的相互影响):
package com.oracle.demo01; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet01 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //搞个ServletContext域对象: ServletContext servCon=this.getServletContext(); //然后上传几个东西(这几个东西的Key不允许有重复值): servCon.setAttribute("张三",18); servCon.setAttribute("李四",20); servCon.setAttribute("王五",25); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } package com.oracle.demo01; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet02 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //搞个ServletContext域对象,跟Servlet01是同一个对象: ServletContext servCon=this.getServletContext(); int zhangsan=(int)servCon.getAttribute("张三"); int lisi=(int)servCon.getAttribute("李四"); int wangwu=(int)servCon.getAttribute("王五"); System.out.println(zhangsan+"……"+lisi+"……"+wangwu); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
HttpServletResponse简介:
设置响应行的状态码:
setStatus(int sc)
通过response设置响应头:
addHeader(String name, String value)
addIntHeader(String name, int value)
addDateHeader(String name, long date)
setHeader(String name, String value)
setDateHeader(String name, long date)
setIntHeader(String name, int value)
其中,Add表示添加,而Set表示设置
重定向:
① 需要状态码为302!
② 响应头Location代表重定向地址!
通过Response设置响应体:
获得字符流,通过字符流的write(String s)方法可以将字符串设置到response缓冲区中,随后TomCat会将response缓冲区中的内容组装成HTTP响应返回给浏览器端!
关于设置中文的乱码问题:
原因:Response缓冲区的默认编码是ISO8859-1,此码表中没有中文,可以通过response的setCharacterEncoding(String charset) 设置Response的编码!
通过Response的setContentType(String type)方法指定页面解析时的编码是UTF-8
response.setContentType("text/html;charset=UTF-8");
//这行代码不仅将Response缓冲区设置成中文,而且也将浏览器的解码方式设置成中文,因此完全可以代替setCharacterEncoding方法!
Response示例代码:
package com.oracle.demo03; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RefreshServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("refresh","5;url=https://www.baidu.com"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } package com.oracle.demo03; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet04 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setStatus(302); //设置响应头: //response.setHeader("Location","Servlet01"); //实际开发中用一句话搞定: response.sendRedirect("Servlet01"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } package com.oracle.demo04; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Writers extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置response缓冲区查询的码表: //response.setCharacterEncoding("utf-8"); //通过设置一个头告知客户端用UTF-8解码(同时设置了response缓冲区和浏览器的解码方式): response.setContentType("text/html;charset=utf-8"); response.getWriter().write("你好!"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }