Servlet配置与资源参数

Servlet实例

  1. importjava.io.*; 
  2. importjavax.servlet.*; 
  3. importjavax.servlet.http.*; 
  4.   
  5. // 继承HttpServlet 类 
  6. public classHelloWorld 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.   } 
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
 
// 继承HttpServlet 类
public classHelloWorld extends HttpServlet {
 
  private String message;
 
  public void init() throws ServletException
  {
      // 执行必需的初始化
      message = "Hello World";
  }
//此方法用来处理GET请求
  public void doGet(HttpServletRequest request,
                    HttpServletResponseresponse)
            throws ServletException,IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html");
 
      // 实际的逻辑是在这里
      PrintWriter out = response.getWriter();
      out.println("<h1>" +message + "</h1>");
  }
  //此方法用来处理POST请求
public void doPost(HttpServletRequestrequest,
                    HttpServletResponseresponse)
            throws ServletException,IOException
  {
      this.doGet(request,response);
  }
 
 
  public void destroy()
  {
      // 什么也不做
  }
}

 

web.xml中的配置

  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> 
   <context-param><!—全局参数-->
             <param-name>uploadfolder</param-name>
             <param-value>attachment</param-value>
      </context-param>
 
       <servlet>
       <servlet-name>HelloWorld</servlet-name>
       <servlet-class>HelloWorld</servlet-class>
    </servlet>
 
       <init-param><!—只能有这个Servlet读取,不是全局参数-->
             <param-name>message</param-name>
             <param-value>welcom toservlet</param-value>
       </init-param>
 
    <servlet-mapping>
       <servlet-name>HelloWorld</servlet-name>
       <url-pattern>/HelloWorld</url-pattern>
    </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中

示例如下:

 

  1. private@Resource(name = “hello”) String hello; //一行的写法 
  2. @Resource(name = “i”)                      //两行的写法 
  3. private int i; 
private@Resource(name = “hello”) String hello; //一行的写法
@Resource(name = “i”)                      //两行的写法
private int i;

 

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

  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> 
<env-entry>
      <env-entry-name>hello</env-entry-name>
      <env-entry-type>java.lang.String</env-entry-type>
      <env-entry-value>welcom toservlet</env-entry-value>
<env-entry>
 
<env-entry>
      <env-entry-name>i</env-entry-name>
      <env-entry-type>java.lang.Integer</env-entry-type>
      <env-entry-value>66</env-entry-value>
<env-entry>

 

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

  1. Context ctx =new InitialContext(); 
  2. String message =(String)ctx.lookup(“message”); 
  3. Integer i =(Integer)ctx.lookup(“i”); 
Context ctx =new InitialContext();
String message =(String)ctx.lookup(“message”);
Integer i =(Integer)ctx.lookup(“i”);

 

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

Servlet是线程不安全的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值