Servlet的两种配置方式:web.xml和@WebServlet注解

web.xml配置(传统配置)

  • 原始的web.xml文件长这个亚子

 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0">
 </web-app>
  • 创建一个servlet

     import javax.servlet.ServletException;
     import javax.servlet.annotation.WebServlet;
     import javax.servlet.http.HttpServlet;
     import javax.servlet.http.HttpServletRequest;
     import javax.servlet.http.HttpServletResponse;
     import java.io.IOException;
     import java.io.PrintWriter;
     ​
     //@WebServlet("/helloServlet")
     public class helloServlet extends HttpServlet {
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          req.setCharacterEncoding("utf-8");
          resp.setCharacterEncoding("utf-8");
     ​
          PrintWriter writer = resp.getWriter();
          writer.write("hello Servlet ");
      }
     ​
      @Override
      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          doGet(req, resp);
      }
     }
  • web.xml注册这个servlet

     <?xml version="1.0" encoding="UTF-8"?>
     <web-app xmlns = "http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
      version="4.0"
      <!--metadata-complete="true"-->
      >
     ​
      <servlet>
          <servlet-name>hello</servlet-name>
          <servlet-class>com.hu.servlet.helloServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello</url-pattern>
      </servlet-mapping>
     ​
     </web-app>
  • servlet-name: servlet的名字

  • servlet-class:你所写的servlet的类名

  • servelt-mapping

    • servlet-name:匹配查找注册好的servlet

    • url-pattern:访问路径

    http://localhost:8080/项目名称/hello

注解配置


       在以往我们的Servlet都需要在web.xml文件中进行配置(Servlet3.0同样支持),但是在Servlet3.0中引入了注解,我们只需要在对应的Servlet类上使用@WebServlet注解进行标记,我们的应用启动之后就可以访问到该Servlet。对于一个@WebServlet而言,有一个属性是必须要的,那就是它的访问路径。@WebServlet中有两个属性可以用来表示Servlet的访问路径,分别是value和urlPatterns。value和urlPatterns都是数组形式,表示我们可以把一个Servlet映射到多个访问路径,但是value和urlPatterns不能同时使用。如果同时使用了value和urlPatterns,我们的Servlet是无法访问到的。下面是一个使用@WebServlet的简单Servlet示例。

Java代码   
   
import java.io.IOException;  
   
import javax.servlet.ServletException;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
   
/** 
 * 
 * Servlet3.0支持使用注解配置Servlet。我们只需在Servlet对应的类上使用@WebServlet进行标注, 
 * 我们就可以访问到该Servlet了,而不需要再在web.xml文件中进行配置。@WebServlet的urlPatterns 
 * 和value属性都可以用来表示Servlet的部署路径,它们都是对应的一个数组。 
 */  
@WebServlet(name="exampleServlet", urlPatterns="/servlet/example")  
public class ExampleServlet extends HttpServlet {  
   
   private static final long serialVersionUID = 1L;  
   
   @Override  
   protected void doGet(HttpServletRequest request,  
         HttpServletResponse response) throws ServletException, IOException {  
      this.doPost(request, response);  
   }  
   
   @Override  
   protected void doPost(HttpServletRequest request,  
         HttpServletResponse response) throws ServletException, IOException {  
      response.getWriter().write("Hello User.");  
   }  
   
}  
 

或者

package cn.edu.cuit.servlet;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * @author fhzheng
 * <li>演示Servlet的生命周期
 */
@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    // 声明计数器,上下文对象,路径
    // 属性
    int count;
    ServletContext sc;
    String path;
    
    /**
     * <li> 做一些准备工作
     * <li> 1 获取上下文环境
     * <li> 2从上下文对象获取文件路径
     * <li> 3读取文件中的信息
     */
    public void init() throws ServletException{
        count = 0;
        System.out.println("在init中完成计数器的初始化");
        sc = this.getServletContext();
        path = sc.getRealPath("WEB-INF/count.txt");

        try {
            InputStream is = LifeServlet.class.getResourceAsStream("countinpackage.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String string;
            string = br.readLine();
            count = Integer.parseInt(string); //计数器完成初始化
            br.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    
    /**
     * <li> 销毁
     */
    public void destroy() {
        System.out.println("Servlet已经释放");
    }
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LifeServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * <li> 处理输出到响应中的信息
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置输出类型和编码字符集
        response.setContentType("text/html;charset=utf-8");
        // 获取out对象
        PrintWriter out = response.getWriter();
        // 计数器自增1
        count++;
        // 插旗
        out.println("这个Servlet历史上已经被访问了"+count+"次了!");
        
        // 写到文件的组合动作
        // 1 获取输出流对象
        OutputStream fw = new FileOutputStream(path);
        // 2 得到写缓存
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fw));
        // 3 准备好数据格式:字符串,由整数转换得到
        String string = String.valueOf(count);
        // 4 写回到文件
        bw.write(string);
        // 5 关闭文件相关资源
        bw.close();
        fw.close();
        
        System.out.println("该Servlet的doGet方法被执行了一次");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
        System.out.println("该Servlet的doPost方法被执行了一次");
    }

}
 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @WebServlet注解是Java Servlet 3.0规范中新增的注解,用于标识一个类是Servlet类。在Servlet 3.0中,使用@WebServlet注解取代了以前在web.xml配置Servlet方式,使用更加方便。 @WebServlet注解有以下属性: 1. name:Servlet的名称,相当于在web.xml配置servlet-name。 2. value:Servlet的URL映射,可以是一个或多个URL,例如“/user”,“/user/*”。 3. loadOnStartup:Servlet的启动顺序,取值为整数,值越小启动越早。 4. initParams:Servlet的初始化参数,可以为Servlet提供一些配置信息。 例如,以下代码定义了一个Servlet,它的名称为“HelloServlet”,URL映射为“/hello”,启动顺序为1,初始化参数为“name=world”: ``` @WebServlet(name = "HelloServlet", value = "/hello", loadOnStartup = 1, initParams = {@WebInitParam(name = "name", value = "world")}) public class HelloServlet extends HttpServlet { //... } ``` ### 回答2: @WebServlet注解是Java Servlet规范中的一种注解,用于标识一个类作为Servlet组件,并将其映射到一个特定的URL路径上。通过使用@WebServlet注解,开发人员可以简化Servlet配置和映射过程,提高开发效率。 @WebServlet注解可以用在Servlet类上,用于指定Servlet的一些属性,如名称、URL映射、初始化参数等。其中,常用的属性包括: 1. name:指定Servlet的名称,可选属性。 2. urlPatterns:指定Servlet的URL映射规则,支持使用通配符或正则表达式,可以指定多个URL路径。 3. value:用于指定Servlet的URL映射规则,与urlPatterns属性功能相同,两者可以互相替代。 4. initParams:指定Servlet的初始化参数,可选属性。 我们可以使用@WebServlet注解来简化传统的web.xml配置文件的编写,以及在web.xml中注册Servlet的繁琐过程。通过在Servlet类上添加@WebServlet注解,我们可以直接在代码中定义Servlet的URL映射规则,并设置初始化参数,使得Servlet配置更加灵活和易于维护。 例如,我们可以使用@WebServlet注解将一个名为MyServlet的类映射到路径"/example"上: @WebServlet("/example") public class MyServlet extends HttpServlet { // Servlet的具体实现代码 } 除了支持基本的URL映射规则外,@WebServlet注解还可以与其他注解组合使用,如@WebFilter、@WebListener等,实现更丰富的功能。同时,@WebServlet注解也支持异步操作,通过配置asyncSupported属性为true,可以实现Servlet的异步处理。 总之,@WebServlet注解是Java Servlet规范中的一个重要注解,可以简化Servlet配置和映射过程,提高开发效率,使得我们能够更便捷地进行Web应用的开发和维护。 ### 回答3: @WebServlet注解是在Java Servlet中常用的一种注解。通过在Servlet类的定义上添加@WebServlet注解,可以将该类声明为一个Servlet配置一些相关的参数,使其能够被容器正确地加载和处理。 @WebServlet注解的常用参数有value、urlPatterns、name、description、initParams等。其中value和urlPatterns通常是用来指定访问该Servlet的URL地址的,可以使用字符串或字符串数组的方式配置,例如:@WebServlet("/example")或@WebServlet(urlPatterns = {"/example", "/demo"})。name和description用于描述Servlet的名称和描述信息,方便开发人员进行识别和理解。initParams参数用于设置一些初始化参数,可以通过initParams = {@WebInitParam(name="param1", value="value1"), @WebInitParam(name="param2", value="value2")}的方式配置。 通过@WebServlet注解配置Servlet时,可以不再需要在web.xml文件中额外配置Servlet的信息,简化了配置的流程,提高了开发效率。另外,使用@WebServlet注解的好处是可以更方便地进行路径的映射配置,而且注解方式更加直观和简洁。 需要注意的是,对于一些特殊的配置情况,例如需要处理特定的HTTP请求方法(GET、POST等),可以通过在@WebServlet注解中添加httpMethod属性来指定,例如@WebServlet(urlPatterns="/example", httpMethod="GET")。此外,@WebServlet注解还具有一些其他的属性,例如asyncSupported属性用于指定是否支持异步处理,loadOnStartup属性用于指定Servlet的加载顺序等。 综上所述,@WebServlet注解是一种用于在Java Servlet配置和定义Servlet注解,通过添加相关的注解参数,可以方便地进行路径映射、初始化参数配置等操作,简化了Servlet配置流程,提高了开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值