【Jsp】第三课 Servlet常用对象(一)

在Servlet技术的学习过程中,需要用到很多的常用对象,而且其用法也非常重要,这里先介绍第一个常用对象,ServletConfig。

概述

1. 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为Servlet配置一些初始化参数。
2.配置在注册信息的Servlet标签中
3. 当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中
4. 并在调用servlet的init方法时,将ServletConfig对象传递给Servlet,进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

代码步骤实现

1.配置文件中添加静态数据

 这里创建项目的过程不再赘述,之后新建包文件,通过class的方式创建Servlet

这里重写带参数的init方法

package com.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class Servlet1 extends HttpServlet {
	
	public Servlet1() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
	}

}

 接着对Servlet在web.xml文件中进行注册

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Day03Jsp</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>Servlet1</servlet-name>
  	<servlet-class>com.servlet.Servlet1</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>Servlet1</servlet-name>
  	<url-pattern>/Servlet1</url-pattern>
  </servlet-mapping>
  
</web-app>

在<servlet>标签中添加静态数据,静态数据的格式必须是:

<init-param>
  		<param-name>hote</param-name>
  		<param-value>酒店</param-value>
  	</init-param>

 将以上格式代码添加至<servlet>标签中

<servlet>
  	<servlet-name>Servlet1</servlet-name>
  	<servlet-class>com.servlet.Servlet1</servlet-class>
  	<init-param>
  		<param-name>hote</param-name>
  		<param-value>酒店</param-value>
  	</init-param>
  </servlet>

 如果需要添加多个静态数据,只要按照这种格式继续加即可:

<servlet>
  	<servlet-name>Servlet1</servlet-name>
  	<servlet-class>com.servlet.Servlet1</servlet-class>
  	<init-param>
  		<param-name>hote</param-name>
  		<param-value>酒店</param-value>
  	</init-param>
  	<init-param>
  		<param-name>money</param-name>
  		<param-value>1000万</param-value>
  	</init-param>
  </servlet>

那么在Servlet1中通过ServletConfig对象获得Web.xml中的静态数据

@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		String a=config.getInitParameter("hote");
		String b=config.getInitParameter("money");
		System.out.println(a+"---"+b);
	}

将项目运行在tomcat服务器上,根据Servlet虚拟地址进行访问Servlet1,在控制台可以看到从web.xml文件中获得的静态数据。这里效果就不展示了,初学者请根据代码自行运行查看效果。

那么当存在大量的静态数据的时候,只是采用getInitParameter(name)方法来一个个获取的话那明显效率太慢了,接下里我们看另一个方法,获得所有静态数据的name,再根据循环遍历根据name获得所有的静态数据。代码如下:

//当存在非常多的静态数据,就不能在使用以上方式一个一个获取
		//应该进行循环获取
		//获得所有静态数据的名称,获取的所有静态数据的名称存储在枚举类型
		Enumeration<String> e= config.getInitParameterNames();
		while (e.hasMoreElements()) {
			String name=e.nextElement();//hotel
			String value=config.getInitParameter(name);
			System.out.println(name+"####"+value);
		}

运行的结果这里也不再赘述,初学者可以自行运行,查看结果,同样可以获取所有的静态数据。

2.Java注解创建Servlet类并添加静态数据

在Servlet3.0之后,提供了注解的方式进行创建Servlet类以及进行注册,那么添加静态数据同样也对应了Java注解,其编写形式如下:

package com.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Servlet2
 */
@WebServlet(urlPatterns = "/Servlet2",initParams = {
		@WebInitParam(name = "name",value = "李四"),
		@WebInitParam(name = "age",value = "20"),
		@WebInitParam(name = "sex",value = "男")
})
public class Servlet2 extends HttpServlet {
	

}

注解的方式注册Servlet以及添加静态数据相比之下会比在Web.xml文件中进行配置会简化,初学者可自行掌握和选择使用。那么ServletConfig对象获取数据是一样的。Servlet中提供了两种init初始化的方法,这次我们重写不带ServletConfig参数的init方法,代码如下:

@Override
    public void init() throws ServletException {
    	super.init();
    	ServletConfig config=getServletConfig();
    	String a=config.getInitParameter("name");
    	String b=config.getInitParameter("age");
    	String c=config.getInitParameter("sex");
    	System.out.println(a+"---"+b+"---"+c);
    	
    	String d=config.getInitParameter("money");
    	System.out.println(d);
    	//总结:ServletConfig对象只会获得每一个Servlet自己本身的静态数据,而不能得到其他Servlet定义的静态数据
    }

因为init方法不带ServletConfig参数,所以我们可以通过Servlet接口中定义的getServletConfig()方法来获得ServletConfig对象,然后就能根据name获得对应静态数据。并且我们也做了测试,在Servlet2类中尝试获得Servlet1中定义的静态数据,根据运行查看的结果可以看出,是不可能获得的。

因此,我们得到的总结:

ServletConfig对象只会获得每一个Servlet自己本身的静态数据,而不能得到其他Servlet定义的静态数据

本次文章就描述到这里,希望初学者能更好的掌握这部分知识。

猜你喜欢

转载自blog.csdn.net/u010321564/article/details/120674383