过滤器:通过对request,response的修改实现特定的功能,如请求数字字符编码,IP地址过滤,异类过滤,用户身份认证等。 监听器:用于监听Web程序中正在执行的程序,根据发生的事件做出特定的响应。
在编写完一个Servlet类后,需要在Web.xml中或者通过注解进行相关的配置,Web容器才能读取Servlet设置的信息,包括其类地址,初始化。对于每个Servlet的配置,Web都生成与之对应的ServletConfig对象,从ServletConfig中可以得到Servelt初始化的参数。在调用init()方法,将产生的ServletConfig作为参数传入Servelt中 GenericServlet类同时实现了Servlet,ServletConfig两个接口。
方法描述getServletName()改方法返回一个Servlet实例的名称getServletContext()返回一个ServletContext对象的引用getInitParameter(String name)返回一个由参数name决定的初始化变量值 若不存在则返回nullgetInitParameterNames()返回一个存储初始化变量的枚举值。若初始化变量则返回一个空枚举类型在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对象是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("<!DOCTYPE html>"); out.println("<html>"); out.println("<head><title>ServletContext</title></head>"); out.println("<body>"); out.println(str);//获取到文件的内容在页面输出 out.println("</body>"); out.println("</html>"); out.close(); }