一、ServletConfig
1、在web.xml中的<servlet>标签下可以使用一个或者多个<init-param>进行一些初始化的操作。
<servlet>
<servlet-name>ThreadSecure</servlet-name>
<servlet-class>com.javaweb.servlet.ThreadSecure</servlet-class>
<init-param>
<param-name>userName</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>root</param-value>
</init-param>
</servlet>
获取从config参数
ServletConfig config;//用来接受初始化参数
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取单个参数
String name = this.config.getInitParameter("userName");
response.getWriter().write(name);
System.out.println(name);
//获取所有的配置参数
Enumeration <String>Names = this.config.getInitParameterNames();
while (Names.hasMoreElements()) {
String names = Names.nextElement();
String value = config.getInitParameter(names);
System.out.println(name+":"+value);
}
}
方式二、从当前servlet对象直接获取initialParameter
String initParameter = this.getInitParameter("name");
response.getWriter().write(initParameter);
二、ServletCotext
1、加载时机
当tomcat启动的时候,会为每个web应用创建一个servletContext对象
2、
多个servlet可以通过ServletContext实现数据共享
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("context1");
ServletContext context = this.getServletConfig().getServletContext();
context.setAttribute("content", "this is Context Class");
}
在另一个类中获取
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = this.getServletConfig().getServletContext();
String attribute = (String) context.getAttribute("content");
System.out.println(attribute);
}
2、获取web应用的初始参数
在web.xml中配置初始化参数和<servlet>同级
<context-param>
<param-name>url</param-name>
</context-param>
在doGet()方法中获取
String parameter = this.getServletContext().getInitParameter("url");
System.out.println(parameter);
- servletContext请求转发功能。
在doGet();方法中
PrintWriter out = response.getWriter();
out.write("<h1>主页</h1>");
ServletContext context = this.getServletContext();
//获取请求转发对象
RequestDispatcher dispatcher=context.getRequestDispatcher("/servlet/ServletDemo1");
//实现转发
dispatcher.forward(request, response);
//包含
dispatcher.include(request, response);
writer.write("\n");换行
转发:将请求转发给另一个web资源
特点:只能转发到内部资源
地址栏的路径不会发生改变
包含:用于响应中包含其他web资源
特点:只能转发内部资源
共享请求和相应对象
成地址栏路径不变
内容显示为当前页面加被包含界面
6、在客户端缓存servlet的输出
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("content-type", "text/html;charset=UTF-8");
response.setDateHeader("cache", 24*3600*1000);
response.getWriter().write("缓存案例");
}
7、路径问题
//绝对路径
String path = servletContext.getRealPath("/");
System.out.println(path);// D:\Tomcat 7.0\webapps\WebServlet\
getResourcePaths(java.lang.String path)
指定路径下的所有资源
Set<String> set = getServletContext().getResourcePaths("/");
for (String path : set) {
System.out.println(path);
}
总结:
绝对路径:就是一盘符开头
相对路径:
不以正斜杠开头:
直接写路径和资源名
以正斜杠开头:
服务器端:servlet映射路径,代表当前webapp的根路径
客户端:a,img,form代表web服务器的根路径要加项目名才能访问到
}