Servlet实例
- 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()
- {
- // 什么也不做
- }
- }
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中的配置
- <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>
<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;
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>
<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”);
Context ctx =new InitialContext();
String message =(String)ctx.lookup(“message”);
Integer i =(Integer)ctx.lookup(“i”);
Servlet中不仅可以注释String、Integer等类型的变量,还可以注射自定义的Java Bean以及数据源等复杂类型变量
Servlet是线程不安全的