<servlet>
<servlet-name>...</servlet-name>:名称
<servlet-class>...</servlet-class>:路径
</servlet>
<servlet-mapping>...</servlet-mapping>:指明了访问指定名称的Servlet的URI
<servlet-mapping>
<servlet-name>...</servlet-name>:名称
<url-pattern>...</url-pattern>:访问Servlet的路径
</servlet-mapping>
------------------------------------------------------------------------------------------------
<init-param>...</init-param>:配置初始化参数
<servlet>
<servlet-name>...</servlet-name>
<servlet-class>...</servlet-class>
<init-param>:第一个参数
<param-name>...</param-name>:参数名称
<param-value>...</param-value>:参数值
</init-param>
<init-param>:第二个参数
<param-name>...</param-name>:参数名称
<param-value>...</param-value>:参数值
</init-param>
......
</servlet>
Servlet中提供方法getInitParameter(String param)来获取初始化参数的值,如果有则返回参数值,否则返回null
方法getInitParameterNames()返回所有参数名称,返回类型为枚举类型(Enumeration)
例子:
......
String userName = request.getParameter("username");
String password = request.getParameter("password");
Enumeration param = this.getInitParameterNames();//获得所有初始化参数的名称
//遍历所有的初始化参数
while(param.hasMoreElements()){
String usernameParam = (String)param.nextElement();//参数名 即 用户名
String passwordParam = getInitParameter(usernameParam);//参数值 即 密码
......
}
......
-------------------------------------------------------------------------------------------
init-param是配置在<servlet>标签里面的,只能由这个Servlet读取
<context-param>...</context-param>:上下文参数或者文档参数,可以被所有Servlet读取
<context-param>
<param-name>...</param-name>:参数名称
<param-value>...</param-value>:参数值
</context-param>
获取context-param可以使用ServletContext对象
方法getServletConfig().getServletContext()获取ServletContext对象
ServletContext的方法getInitParameter()获取指定名称的参数值
ServletContext的方法getInitParameterNames()获取所有context-param参数名称
例如:
......
ServletContext servletContext = getServletConfig().getServletContext();
String uploadFolder = servletContext.getInitParameter("upload Folder");//获取参数
String allowedFileType = servletContext.getInitParameter("allowed file type");//获取参数
......
---------------------------------------------------------------------------------------------
注意:JDK5以上支持@注解,资源注射需要服务器支持,Tomcat6以上支持,其他Web服务器可能不支持,使用时须注意!
@Resource:资源注射或者资源注入
不需要Servlet主动去读取资源,Tomcat启动的时候会把web.xml里配置的信息主动“注射”到Servlet里。
<env-entry>...</env-entry>:配置资源注射的变量,仅能配置java.lang包下标准的变量,如:String、Integer、Double等
<env-entry>
<env-entry-name>...</env-entry-name>:参数名
<env-entry-type>...</env-entry-type>:参数类型,如:java.lang.String
<env-entry-value>...</env-entry-value>:参数值
</env-entry>
获取env-entry的方法:private @Resource(name="valueName") String message
在web.xml中配置一个变量valueName,message的值会在Servlet运行时动态注入
注射资源的工作原理是JNDI(java命名与目录接口,Java Naming and Directory interface),Servlet中使用<env-entry>配置了变量的JNDI资源,然后使用@Resource将指定名称的JNDI资源注射到Servlet里。如果不使用@Resource,通过查找JNDI同样可以获得变量资源。
例如:
Context ctx = new InitialContext();//实例化一个Context对象
String message = (String)ctx.lookup("message");//查找资源message
注射数据源等复杂复杂类型变量
例如:
假设已经在Tomcat中配置好了数据源dataBase
@Resource(name="dataBase") //声明数据源
javax.sql.DataSource dataSource; //注射到dataSource属性上
public void getConnection(){
Connection conn = dataSource.getConnection();//方法中直接使用dataSource
......
}