首页 > 代码库 > Servlet配置与资源参数

Servlet配置与资源参数

  1. import java.io.*;  
  2. import javax.servlet.*;  
  3. import javax.servlet.http.*;  
  4.    
  5. // 继承HttpServlet 类  
  6. public class HelloWorld extends HttpServlet {  
  7.    
  8.   private String message;  
  9.    
  10.   public void init() throws ServletException  
  11.   {  
  12.       // 执行必需的初始化  
  13.       message = "Hello World";  
  14.   }  
  15. //此方法用来处理GET请求  
  16.   public void doGet(HttpServletRequest request,  
  17.                     HttpServletResponseresponse)  
  18.             throws ServletException,IOException  
  19.   {  
  20.       // 设置响应内容类型  
  21.       response.setContentType("text/html");  
  22.    
  23.       // 实际的逻辑是在这里  
  24.       PrintWriter out = response.getWriter();  
  25.       out.println("<h1>" +message + "</h1>");  
  26.   }  
  27.   //此方法用来处理POST请求  
  28. public void doPost(HttpServletRequestrequest,  
  29.                     HttpServletResponseresponse)  
  30.             throws ServletException,IOException  
  31.   {  
  32.       this.doGet(request,response);  
  33.   }  
  34.    
  35.    
  36.   public void destroy()  
  37.   {  
  38.       // 什么也不做  
  39.   }  
  40. }  


 

web.xml中的配置

    

[html] view plaincopyprint?技术分享技术分享
  1. <context-param><!-- 全局参数-->  
  2.            <param-name>uploadfolder</param-name>  
  3.            <param-value>attachment</param-value>  
  4.     </context-param>  
  5.   
  6.      <servlet>  
  7.      <servlet-name>HelloWorld</servlet-name>  
  8.      <servlet-class>HelloWorld</servlet-class>  
  9.   </servlet>  
  10.   
  11.      <init-param><!-- 只能有这个Servlet读取,不是全局参数-->  
  12.            <param-name>message</param-name>  
  13.            <param-value>welcom toservlet</param-value>  
  14.      </init-param>  
  15.   
  16.   <servlet-mapping>  
  17.      <servlet-name>HelloWorld</servlet-name>  
  18.      <url-pattern>/HelloWorld</url-pattern>  
  19.   </servlet-mapping>  

 

<url-pattern>可以同时配置多个映射,也允许使用通配符“*”和“_”

在Servlet中通过getServletConfig.getInitParameter(Stringname)来取得配置中的初始化参数(如果没有context初始化参数与Servlet的初始化参数同名,getServletContext.getInitParameter(String name)也可以取到此参数,但是不推荐这么用)

如果要取得context初始化参数,用getServletConfig.getServletContext. getInitParameter(String name)

上面的两种方法都是都是在编写程序代码时读取初始参数,java EE 5以后还提供了资源注射(Resource Injection)的方法,不需要Servlet主动地去读取资源,Tomcat启动时会把web.xml里配置的信息主动注射到Servlet中

示例如下:

 

[java] view plaincopyprint?技术分享技术分享
  1. private@Resource(name = “hello”) String hello; //一行的写法  
  2.   
  3. @Resource(name = "i")                      //两行的写法  
  4. private int i;  


 

在web.xml中用<env-entry>标签来配置资源

[html] view plaincopyprint?技术分享技术分享
  1. <env-entry>  
  2.       <env-entry-name>hello</env-entry-name>  
  3.       <env-entry-type>java.lang.String</env-entry-type>  
  4.       <env-entry-value>welcom toservlet</env-entry-value>  
  5. <env-entry>  
  6.    
  7. <env-entry>  
  8.       <env-entry-name>i</env-entry-name>  
  9.       <env-entry-type>java.lang.Integer</env-entry-type>  
  10.       <env-entry-value>66</env-entry-value>  
  11. <env-entry>  

 

资源注射的原理是JNDI(java命名与目录接口,Java Naming and Directory Interface),如果不使用@Resource注解,通过查找JNDI同样可以获取到这三个资源

[java] view plaincopyprint?技术分享技术分享
  1. Context ctx =new InitialContext();  
  2. String message =(String)ctx.lookup("message");  
  3. Integer i =(Integer)ctx.lookup("i");  

 

Servlet中不仅可以注释String、Integer等类型的变量,还可以注射自定义的Java Bean以及数据源等复杂类型变量

Servlet配置与资源参数