标注方式配置Servlet及404解决方法

本文介绍Servlet3.0中引入的注解支持特性,包括如何使用@WebServlet注解配置Servlet,以及配置中的常见属性。此外,还探讨了web.xml与注解共存的情况及可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet3.0(java ee6)中加入了新增的标注支持,用于简化Servlet、Filter、Listener的声明,这使得web.xml部署描述文件从该版本开始不再是必选的了。

Servlet3.0的部署描述文件web.xml的顶层标签<web-app>有一个metadata-complete属性,该属性为true,则容器在部署时只依赖部署描述文件,忽略所有标注,如果不配置该属性,或者将其设置为false,则表示启动标注支持。

采用标注方式配置Servlet类是通过在Servlet类定义之前的位置添加标注信息来实现:

package javaee.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.*;

//说明该类是一个Servlet
@WebServlet(
	urlPatterns = {"/sayHello"},//Servlet的路径
	initParams = {//初始化参数,以名-值对的形式定义
			@WebInitParam(name="language", value="english")
	})
public class HelloWorldServlet extends HttpServlet{
	
	//处理Http请求
	public void service(HttpServletRequest request, HttpServletResponse response)
	throws IOException,ServletException{
		//使输出页面支持中文
		response.setContentType("text/html;charset=utf-8");
		//获得输出对象
		PrintWriter out = response.getWriter();
		//获得初始化参数
		String language = getInitParameter("language");
		out.println("<p>语言是 "+language+"<p>");
	}
}

该标注具有下表给出的一些常用属性



下面总结采用标注方式配置Servlet报404错误的几种原因

  • 采用了java EE5或以前的版本,只有java EE5才支持Servlet 3.0版本的特性
  • 在xml.web中web-app标签的version属性不为3.0,导致容器没有按照Servlet 3.0版本正确配置
  • Tomcat7之后的版本才会支持该特性,使用MyEclipse自带的tomcat可能导致失败


注意:当metadata-complete="false"时,web.xml和注解对于Servlet的影响同时起作用,两种方法定义的url-partten都可以访问到该Servlet,但是当通过web.xml定义的url-partten访问时,注解定义的属性(初始化参数等)将失效。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值