您的位置:首页 > 其它

Servlet配置与资源参数

2014-12-28 11:14 162 查看


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 继承HttpServlet 类
public class HelloWorld 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中的配置

<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中

示例如下:

private@Resource(name = “hello”) String hello; //一行的写法

@Resource(name = "i")                      //两行的写法
private int i;


在web.xml中用<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同样可以获取到这三个资源

Context ctx =new InitialContext();
String message =(String)ctx.lookup("message");
Integer i =(Integer)ctx.lookup("i");


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

Servlet是线程不安全的

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: