Servlet进阶API

过滤器与监听器

过滤器:通过对request,response的修改实现特定的功能,如请求数字字符编码,IP地址过滤,异类过滤,用户身份认证等。
监听器:用于监听Web程序中正在执行的程序,根据发生的事件做出特定的响应。

ServletConfig

在编写完一个Servlet类后,需要在Web.xml中或者通过注解进行相关的配置,Web容器才能读取Servlet设置的信息,包括其类地址,初始化。对于每个Servlet的配置,Web都生成与之对应的ServletConfig对象,从ServletConfig中可以得到Servelt初始化的参数。在调用init()方法,将产生的ServletConfig作为参数传入Servelt中
GenericServlet类同时实现了Servlet,ServletConfig两个接口。

方法 描述
getServletName() 改方法返回一个Servlet实例的名称
getServletContext() 返回一个ServletContext对象的引用
getInitParameter(String name) 返回一个由参数name决定的初始化变量值 若不存在则返回null
getInitParameterNames() 返回一个存储初始化变量的枚举值。若初始化变量则返回一个空枚举类型

在Web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <display-name>ss</display-name>
        <servlet-name>ServletConfig</servlet-name><!--Servlet名称-->
        <servlet-class>until7ServletConfig.test</servlet-class><!--类路径-->
        <load-on-startup>-1</load-on-startup>//设置优先级

        <init-param>
            <param-name>success</param-name>//配置初始化值实现跳转
            <param-value>success.html</param-value>
        </init-param>
        <init-param>
            <param-name>error</param-name>//配置初始化值实现跳转
            <param-value>error.html</param-value>
        </init-param>
        <init-param>
            <param-name>use</param-name>//配置初始化值
            <param-value>xing</param-value>
        </init-param>
        <init-param>
            <param-name>pass</param-name>//配置初始化值
            <param-value>1234</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletConfig</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>

ServletConfig方法实现

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        ServletConfig config = getServletConfig();//获取ServletConfig对象
        String success = config.getInitParameter("success");
        String error = config.getInitParameter("error");
        System.out.println("success......"+success);
        System.out.println("error......"+error);
        Enumeration enumeration = config.getInitParameterNames();//枚举类型
        while (enumeration.hasMoreElements()){
            String name = (String)enumeration.nextElement();//至少话有一个可提供元素返回下一个
            String value = config.getInitParameter(name);
            System.out.println("name......"+name);
            System.out.println("value....."+value);
        }
        ServletContext servletContext = config.getServletContext();//获取上下文
        System.out.println("ServletContext......"+servletContext);
        String servletName = config.getServletName();
        System.out.println("servletName....."+servletName);
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //String use = request.getParameter("use");
        //String pass = request.getParameter("pass");
        String use = config.getInitParameter("use");
        String pass = config.getInitParameter("pass");//通过ServletConfig对象获取Servlet类初始化时的参数
        if(use!=null&&"a".equals(use)&&pass!=null&&"1234".equals(pass)){
            HttpSession session = request.getSession();
            session.setAttribute("use",use);
            RequestDispatcher dispatcher = request.getRequestDispatcher(success);//判断实现跳转
            dispatcher.forward(request,response);
        }else{
            RequestDispatcher dispatcher = request.getRequestDispatcher(error);//判断实现跳转
            dispatcher.forward(request,response);
        }

    }

ServletContext

使用ServletContext对象是Servlet中全局存储信息,获取请求资源的URL设置,Web应用程序初始化参数。
当服务器启动web容器为web应用创建唯一的ServletContext对象,应用Servlet共享一个ServletContext对象。ServletContext存放共享信息。属于Web应用被各个Servlet共享。

方法 描述
getRealPath(String path) 获取给定的虚拟路径所对应的真实路径名
getResource(String uripath) 返回由path指定的资源路径对应的一个URL对象
getResourceAsStream(String uripath) 返回一个指定位置资源的InputStream,返回InputStream可以任意类型和长度
getRequestDispatcher(String uripath) 返回一个特定URL的RequestDispatcher对象,否则返回一个空值
getResourcePaths(String path) 返回一个存储web-app中指定资源路径的set集合,若一个目录信息,会以“/”作为结尾
getServletInfo 获取服务器的名字和版本号

web.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <display-name>ss</display-name>
        <servlet-name>ServletContext</servlet-name><!--Servlet名称-->
        <servlet-class>until7ServletContext.test</servlet-class><!--类路径-->
        <load-on-startup>-1</load-on-startup>

        <init-param>
            <param-name>dir</param-name>
            <param-value>/dir</param-value>
        </init-param>

        <init-param>
            <param-name>success</param-name>
            <param-value>success.html</param-value>
        </init-param>
        <init-param>
            <param-name>resource</param-name>
            <param-value>/dir/test1.txt</param-value>
        </init-param>

    </servlet>
    <servlet-mapping>
        <servlet-name>ServletContext</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>

ServletContext的用法

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        String dir = getInitParameter("dir");
        String success = getInitParameter("success");
        String resource = getInitParameter("resource");
        ServletContext context =getServletContext();//获取ServletContext对象
        String path = context.getRealPath(success);//获取真实路径
        System.out.println("path:真实路径......."+path);
        Set set = context.getResourcePaths(dir);//获取指定路径的内容
        for (Object str:set){//遍历set
            System.out.println("文件...."+(String)str);
        }
        String serverinfo = context.getServerInfo();//获取服务器版本号
        System.out.println("获取到服务器的版本号为..."+serverinfo);
        InputStream in = context.getResourceAsStream(resource);
        ServletOutputStream ou = response.getOutputStream();//输出二进制字符下载文件
        byte[] b = new byte[1024];
        //int len = -1;
        while ((in.read(b))!=-1){
            ou.write(b);
        }
        String str = new String(b);//转化为String形式
        System.out.println(str);//在后台输出页面内容
        in.close();
        ou.close();
        response.setContentType("text/html;charset = utf-8");
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println("ServletContext");
        out.println("");
        out.println(str);//获取到文件的内容在页面输出
        out.println("");
        out.println("");
        out.close();
    }

你可能感兴趣的:(Servlet进阶API)