1.5Servlet学习——ServletConfig接口、Servlet初始化参数配置连接数据库和ServletContext接口

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




猜你喜欢

转载自blog.csdn.net/smallhc/article/details/80634413
今日推荐