ServletConfig接口:
容器在初始化一个Servlet时,将为该Servlet创建一个唯一的ServletConfig对象,并将这个Servletconfig对象通过init(ServletConfig config方法)传递并保存在此Servlet对象中。
主要方法:
String getInitParameter(String name) 根据给定的初始化参数名称,返回参数值,若不存在则返回null Enumeration<String> getInitParameterNames() 返回一个Enumeration对象,里面包含了所有的初始化参数名称。 ServletContext getServletContext() 返回当前ServletContext对象 String getServletName() 返回Servlet的初始化名字
Servlet初始化参数配置:
<servlet> <servlet-name>ServletTest5</servlet-name> <servlet-class>com.servlet.ServletTest5</servlet-class> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/test</param-value> </init-param> <init-param> <param-name>name</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>123456</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletTest5</servlet-name> <url-pattern>/ServletTest5</url-pattern> </servlet-mapping>
配置好参数之后在servlet中覆盖init()方法,然后使用getInitParameters()就可以获取到参数
@Override public void init() throws ServletException { String url = getInitParameter("url"); String name = getInitParameter("name"); String password = getInitParameter("password"); try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url,name,password); ResultSet rs = conn.createStatement().executeQuery("select * from person"); while(rs.next()) { System.out.println(rs.getString("name")); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
ServletContext接口:
ServletContext也称为Servlet上下文,代表当前Servlet运行情况,是Servlet与Servlet容器之间的直接通信接口。Servlet容器在启动一个WEB应用的时候,会为该应用创建一个唯一的ServletContext对象供该应用中的所有Servlet对象共享,Servlet对象可用通过ServletContext对象来访问容器中的各种资源。
1.获取应用初始化参数
在servlet中通过super.getServletContext().getInitParameter("参数名")就可以获取在web.xml的对应的servlet配置的初始化参数
也可以使用super.getServletContext().getInitParameterNames();来获取所有的参数
但是实际使用中,这些方法已经被封装好了,要获得getServletContext不需要用super,而getInitParameter等方法也是可以直接调用的。
2.存取应用域属性
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); //如果定义num为int,获取到的参数内容为空的话,那么自动拆箱的时候(Integer.parseInt(s))会有空指针异常 Integer num = (Integer)super.getServletContext().getAttribute("num"); if(num == null) { num = 1; }else { num++; } getServletContext().setAttribute("num", num); //设置响应到客户端的文本类型 PrintWriter out = response.getWriter(); out.print("当前访问人数:"+num); }
不断刷新访问页面,显示的人数也会增加。
3.获取应用信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); ServletContext servletContext = getServletContext(); //servletContext.getRequestDispatcher("/test.jsp").forward(request, response); //getContext("url")方法可以获得当前servlet容器中的其他web应用的ServletContext对象,并且url是以/开头的绝对路径 out.println("容器中url路径是/test的应用名称是:"+servletContext.getContext("/JavaWeb/test").getServletContextName()+"<br/>"); //getContextPath()可以返回当前web应用的根路径 out.print("当前应用的上下文根路径是:"+servletContext.getContextPath()); }
tomcap服务器默认不能跨应用访问,若要访问统一容器下的其他应用,需要将%TOMCAT_HOME%/conf/context.xml文件中的<Context>的属性crossContext设为true
4.获取容器信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charser=utf-8"); PrintWriter out = response.getWriter(); ServletContext sc = getServletContext(); //web容器的名字和版本 out.println(sc.getServerInfo()+"<br/>"); //web容器支持的Servlet api 的主板本号 out.print(sc.getMajorVersion()+"<br/>"); //web容器支持的Servlet api 的副版本号 out.print(sc.getMinorVersion()); out.close(); //记录日志 //sc.log("日志内容"); //记录异常日志 //sc.log("错误信息",new Exception("异常了")); }
5.获取服务器文件资源
getResourceAsStream(String path):返回一个读取参数指定的文件输入流,参数路径必须以/开头 getResource(String path):返回一个path指定的资源路径对应的一个URL对象,参数路径以/开头 getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实路径 getMimeType(String file):返回参数指定文件的MIME类型