Servlet使用注解配置URl提示404错误
2017-01-14 00:10
387 查看
之前配置Servlet作为URL的时候,都是在web.xml中配置的,配置方法大概如下:
如果我有这样一个Servlet的话:
hello.java代码:
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class hello extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = arg1.getWriter();
out.print("Hello World!");
out.close();
}
}
可以在web.xml中这样配置:
<servlet>
<servlet-name>hello</servlet-name><!-- 这里的name与下面的name一致即可 -->
<servlet-class>test.hello</servlet-class><!-- 使用到的class文件 -->
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name><!-- 与上面的name一致 -->
<url-pattern>/hello</url-pattern><!-- 所映射的URL -->
</servlet-mapping>
运行这个Servlet:
但是如果这样的Servlet多的话,每个都需要配置会很麻烦。
然后今天学到了注解,Servlet3.0之后可以在Servlet中使用注解直接配置URL。
需要在Servlet中导入 import javax.servlet.annotation.WebServlet;
然后使用@WebServlet("/URlname")
就可以直接配置了,然后通过所输入的URL可以直接访问到。
使用注解配置刚才的Servlet代码如下:
这里需要将刚才在web.xml中配置的内容删除掉(后面会演示如果不删除的话会出现什么情况)。
但是这样直接运行的话,却提示404资源不存在。
解决的办法就是将web.xml中的metadate-complete=“true”,修改为false。
修改false之后再次运行即可成功运行。
如果使用了注解之后,还要继续在web.xml中配置该Servlet的话,会出现如下情况:
web.xml中为该Servlet配置成helloweb。
Servlet中使用注解配置成hellozhujie。
但是运行之后显示的是helloweb:
很显然,当web.xml和注解同时存在的时候,使用的是web.xml中所配置的内容,而忽略了注解配置的内容。
为什么将metadate-complete设置为false,就可以运行了呢?
因为:
Servlet 3.0 的部署描述文件 web.xml 的顶层标签 <web-app> 有一个 metadata-complete 属性,该属性指定当前的部署描述文件是否是完全的。如果设置为 true,则容器在部署时将只依赖部署描述文件,忽略所有的注解(同时也会跳过 web-fragment.xml 的扫描,亦即禁用可插性支持,具体请看后文关于 可插性支持的讲解);如果不配置该属性,或者将其设置为
false,则表示启用注解支持(和可插性支持)。
复制于:Servlet3.0新特性详解
如果我有这样一个Servlet的话:
hello.java代码:
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class hello extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = arg1.getWriter();
out.print("Hello World!");
out.close();
}
}
可以在web.xml中这样配置:
<servlet>
<servlet-name>hello</servlet-name><!-- 这里的name与下面的name一致即可 -->
<servlet-class>test.hello</servlet-class><!-- 使用到的class文件 -->
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name><!-- 与上面的name一致 -->
<url-pattern>/hello</url-pattern><!-- 所映射的URL -->
</servlet-mapping>
运行这个Servlet:
但是如果这样的Servlet多的话,每个都需要配置会很麻烦。
然后今天学到了注解,Servlet3.0之后可以在Servlet中使用注解直接配置URL。
需要在Servlet中导入 import javax.servlet.annotation.WebServlet;
然后使用@WebServlet("/URlname")
就可以直接配置了,然后通过所输入的URL可以直接访问到。
使用注解配置刚才的Servlet代码如下:
这里需要将刚才在web.xml中配置的内容删除掉(后面会演示如果不删除的话会出现什么情况)。
但是这样直接运行的话,却提示404资源不存在。
解决的办法就是将web.xml中的metadate-complete=“true”,修改为false。
修改false之后再次运行即可成功运行。
如果使用了注解之后,还要继续在web.xml中配置该Servlet的话,会出现如下情况:
web.xml中为该Servlet配置成helloweb。
Servlet中使用注解配置成hellozhujie。
但是运行之后显示的是helloweb:
很显然,当web.xml和注解同时存在的时候,使用的是web.xml中所配置的内容,而忽略了注解配置的内容。
为什么将metadate-complete设置为false,就可以运行了呢?
因为:
Servlet 3.0 的部署描述文件 web.xml 的顶层标签 <web-app> 有一个 metadata-complete 属性,该属性指定当前的部署描述文件是否是完全的。如果设置为 true,则容器在部署时将只依赖部署描述文件,忽略所有的注解(同时也会跳过 web-fragment.xml 的扫描,亦即禁用可插性支持,具体请看后文关于 可插性支持的讲解);如果不配置该属性,或者将其设置为
false,则表示启用注解支持(和可插性支持)。
复制于:Servlet3.0新特性详解
相关文章推荐
- Servlet使用注解配置URl提示404错误
- Servlet使用注解配置URl提示404错误
- Servlet3.1使用@WebServlet注解配置问题记录
- Grid ++ MIME 类型配置 载入报表数据,检查此URL及其数据,错误提示 网络服务器响应不成功
- 模拟Servlet3.0使用注解的方式配置Servlet
- 在使用注释来配置servlet时,出现了405错误
- 错误提示之(MVC3.0):HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确 MVC误设起始页
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- 模拟Servlet3.0使用注解的方式配置Servlet
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- 错误:为 Web 项目“XXX”配置的 URL“http://localhost/”的网站同时存在于本地 IIS Web 服务器和 IIS Express Web 服务器上。您需要使用 IIS 管理器在 IIS 中更改此网站的绑定。
- 使用Ajax.net遇到的问题-使用会话时提示错误"只有在配置文件或 Page 指令中将启用会话状态设置为真时,才可以使用会话状态
- phpmyadmin登录后显示“使用配置文件中定义的控制用户连接失败。”错误提示
- 错误提示之(MVC3.0):HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
- [java][servlet]模拟Servlet3.0使用注解的方式配置Servlet
- 错误提示之(MVC3.0):HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确 MVC误设起始页
- Servlet3.0中Servlet的使用(注解&&配置文件)
- tp5 url 线上访问 在nginx 上 出现404错误,解决办法(1.80nginx 配置 pathInfo)