ServletContext
代表整个web应用程序,用于共享数据
ServletConfig
代表某个Servlet
Servlet三大域对象
域对象:作用范围不同的对象
域对象 | 解释 |
---|---|
ServletContext(Application) | 所有用户都可以获得此对象,或者所有的网页都可以获得。在服务器启动时创建,在服务器关闭时销毁,一个web应用程序只有一个ServletContext |
HttpSession | 服务器会为每个会话创建一个session对象,打开关闭浏览器为一次会话的开始和结束。一次会话只创建一个session对象,默认有效期是30min。应用:用户登录 |
HttpServletRequest | 作用域:仅在当前请求中有效,会创建一个request,请求结束则失效。应用:请求转发,或者实现不同页面的参数传递 |
代码实例
获取ServletContext对象的两种方式
// 获取ServletContext对象的两种方式
// 方式一
out.print(getServletConfig().getServletContext()+"</br>");
// 方式二
out.print(getServletContext()+"</br>");
// 获取全局的初始化参数
ServletContext servletContext = getServletContext();
Enumeration<String> names = servletContext.getInitParameterNames();
// 得到具体的参数值
while(names.hasMoreElements()){
// 参数名
String name = names.nextElement();
// 参数值
String value = servletContext.getInitParameter(name);
out.print(name+":"+value+"</br>");
}
// 获取真实路径F:\tomcat\apache-tomcat-8.0.9\webapps\servlet02
out.print(servletContext.getRealPath("/")+"</br>");
// 获取web应用名称/servlet02
out.print(servletContext.getContextPath());
// 获得ServletContext对象的共享数据
Object name = servletContext.getAttribute("name");
System.out.println(name);
访问图片
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置相应的内容类型
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 1.获取ServletContext对象
ServletContext servletContext = getServletContext();
// 2.获取项目图片文件夹的真实路径
String path = servletContext.getRealPath("/imgs");
out.print(path+"</br>");
// 3.获取图片目录下的所有文件名称
File file = new java.io.File(path);
// 列出所有的文件
String[] names = file.list();
for (String s : names) {
out.print(s+"</br>");
}
// 4.将imgs下面的所有图片显示到浏览器
//out.print("<img src='/imgs/1.jpg'>");
String contextPath = servletContext.getContextPath();
for (String p : names) {
String img = "<img src='"+contextPath+"/imgs/"+p+"'/></br>";
out.print(img);
}
}
设置属性,同一应用程序下的任意servlet均可访问
public class NodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
// 初始化网站点击量计数器
getServletContext().setAttribute("count", 0);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 使用ServletContext共享数据
ServletContext servletContext = getServletContext();
/*// 设置属性
servletContext.setAttribute("name", "zhangsan");
// 获取属性
Object name = servletContext.getAttribute("name");
System.out.println(name);*/
// 获得点击量
int count = (int)servletContext.getAttribute("count");
count += 1;
// 重新赋值
servletContext.setAttribute("count", count);
// 相应到浏览器
response.setContentType("text/html;charset=utf-8");
response.getWriter().print("<span style='color:red'>"+count+"</span>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Servlet3.0注解
1.Servlet传统的配置方式
Servlet,Servlet-Name,Servlet-Class,url-pattern等
2.基于注解的方式
@WebServlet(
name="FiveServlet",
urlPatterns={"/five","/fiveServlet"},
initParams={// 初始化参数
@WebInitParam(name="username",value="zhangsan"),
@WebInitParam(name="password",value="password")
},
loadOnStartup=1// 加载时机
)
public class FiveServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("fiveServlet....");
//getServletContext().getInitParameter("name");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
最常用的方式:
@WebServlet("/six")
public class SixServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().print("<h1>hello China!</h1>");
}
}