今天在看关于servlet的知识,像java程序都继承了object类一样,servlet程序都是servlet的子类,意思是,所有servlet程序都要继承于servlet(可继承的类有:GenericServlet,HttpServlet)。
在我写第一个servlet程序时,竟然不用写web.xml文件,只是在类的外面写了下面的一句话:
@WebServlet(name="servletname",urlPttern={“/servletReaplace”});
这是为什么呢?一开始我百思不得其解,在网上无意中看到一篇文章为我解开了困惑。
Tomcat 7之无需JDK只需JRE与无需web.xm及J2SE 6.0之真实与谎言?
当然首先是确定一下,是真实的,吃个定心丸先,不是谎言:)
[Loaded java.io.IOException from shared objects file] 实际上,启动脚本先会认 JAVA_HOME 变量,在找到 JAVA_HOME 的情况下,会将 JAVA_HOME 赋值给 JRE_HOME,如果有定义 JRE_HOME 变量的话,则 JRE_HOME 变量是最优先的,比如,你定义
JAVA_HOME=D:\JDK\1.6.0
是运行不起来的。
<role rolename="manager-gui"/>
为此,你需要设置不同的角色处理不同的管理内容,具体如下:
http://localhost:8080/manager/status
测试一下无需web.xml配置文件来创建一个Web应用程序项目 Tomcat7
@WebServlet("/AnnotationServlet") public class AnnotationServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { PrintWriter out = response.getWriter(); out.println("Annotation Servlet in Tomcat 7"); } }如果你用JDK 1.5来编译则会出错
javac -cp D:\OpenSource\Tomcat\7.0.0-RC4\lib\servlet-api.jar *.java http://localhost:8080/Tomcat7/AnnotationServlet
当然一个Web项目,少了web.xml文件估计也是玩不转的,试一下通过注解与没有注解的Servlet共同工作的场景,创建一个 NoneAnnotationServlet.java
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>Web Application Tomcat 7 Servlet 3.0 JSP 2.2</display-name> <description>Web Application Tomcat 7 Servlet 3.0 JSP 2.2</description> <servlet> <servlet-name>NoneAnnotationServlet</servlet-name> <servlet-class>NoneAnnotationServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>NoneAnnotationServlet</servlet-name> <url-pattern>/NoneAnnotationServlet</url-pattern> </servlet-mapping> </web-app>
编译、部署后,都可以正常工作。 蒽哪,很和谐的说。Tomcat还有很多新的Servlet 3.0与Java EE 6规范的特性,慢慢测试之。 框中的内容出自:http://www.oschina.net/question/12_9194 |
<pre name="code" class="java">package self.servlet.a; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.GenericServlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; //declaring a Servlet application with //@WebServlet(name = "MyServlet",urlPatterns={"/my"}) @WebServlet(name="MyServlet",urlPatterns = {"/my"}) public class MyServlet { /** * */ private static final long serialVersionUID = 1L; //declaring variable transient ServletConfig servletConfig; public void init(ServletConfig servletConfig) throws ServletException { this.servletConfig = servletConfig; } public ServletConfig getServletConfig(){ return this.servletConfig; } public String getServletInfo(){ return "MyServlet!"; } public void service(ServletRequest request, ServletResponse response) throws ServletException,IOException { String servletName = this.servletConfig.getServletName(); response.setContentType("text/html"); PrintWriter write = response.getWriter(); write.print("<html><head></head>"+"<body>Hello,"+servletName+"</body>"+"</html>"); } public void destroy(){ } }
<span style="font-size:18px;">运行时,程序一直报<span style="color:#ff0000;">Http:404错误。</span></span>
</pre><pre name="code" class="java"><span style="font-size:18px;">直到把MyServlet写上继承类:GenericServlet,才可以运行成功。</span>
</pre><pre name="code" class="java"><span style="font-size:18px;">这就是开头在说的:<span style="color:#333300;">所有servlet程序都是Servlet的子类,写程序时,都要写上继承了某个Servlet父类。</span></span>
原文地址:http://blog.csdn.net/anglebeat/article/details/39737939