二、ServletConfig与ServletContext

一、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>
      <param-value> jdbc://mysql//localhost:3306/db </param-value>
</context-param>

     在doGet()方法中获取
             
String parameter = this.getServletContext().getInitParameter("url");
 System.out.println(parameter);

  1. 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服务器的根路径要加项目名才能访问到


           }

猜你喜欢

转载自blog.csdn.net/gj_user/article/details/80147714