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类型