Tomcat没有运行servlet

时间:2013-11-22 15:59:24

标签: java eclipse tomcat servlets

所以我写了一个servlet,它将所有对/ foo / *的请求重定向到.jsf文件,说URL不再存在。我得到它的设置,以便我可以导航到/newpath/error.faces找到。我在eclipse中启动服务器并导航到匹配/ foo / *映射的任何URL时的问题我什么都没得到。浏览器中没有404和插孔中的插孔蹲下。没有错误,没有消息,什么都没有,我可以找出原因。

我通过转到Window-> Preferences-> Server-> Runtime Environment-> Apache Tomcatv7.0-> Edit->进行检查以确保我在正确的root中。并查看了Tomcat安装目录字段。

指向C:/ Users / myName / Tomcat 7.0。

C:/ Users / myName / Tomcat 7.0 / webapps / ROOT / WEB-INF中的web.xml文件如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  -->

 <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"
  metadata-complete="true">  

 <display-name>Welcome to Tomcat</display-name>
 <description>
   Welcome to Tomcat
 </description>

<servlet>
  <servlet-name>errorServlet</servlet-name>
  <servlet-class>errorServlet</servlet-class>
</servlet>

  <servlet-mapping>
   <servlet-name>errorServlet</servlet-name>
   <url-pattern>/foo/*</url-pattern>
  </servlet-mapping>
 </web-app>
</web-app>

和位于同一目录中的errorServlet.java看起来像

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

public class errorServlet extends HttpServlet{


public errorServlet(){
    super();
}

public void init(ServletConfig config) throws ServletException{
    super.init(config);
}


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  processRequest(request, response);
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  String redirectString = response.encodeRedirectURL("/newpath/error.faces");
  response.sendRedirect(redirectString);
}

}

我已经从errorServlet.java编译了.class和.jar文件(分别名为errorServlet.class和errorServlet.jar),并且它们与.java文件位于同一位置。我错过了什么或做错了什么?当我到/ foo / *时,为什么我的servlet没有被触发?

编辑:我已经做出了前两个答案所建议的更改,而他们的建议得到了赞赏我仍然没有看到任何内容(此时我会至少查找错误消息)。

3 个答案:

答案 0 :(得分:1)

在WEB INF XML中突出的一个错误是

<url-pattern>/foo/*</url>

您正在使用“url-pattern”打开标记,但使用“/ url”关闭它。你应该用“/ url-pattern”关闭它。此外,您可能不需要“*”通配符,您可以这样做,所以它看起来像:

<url-pattern>/foo/</url-pattern>

尝试一下,它应该工作,其他一切看起来都没问题。

答案 1 :(得分:0)

从您的web.xml errorServlet.errorServlet - 表示您的包含errorServlet和类errorServlet。但是你的java代码没有任何包声明。所以Tomcat至少找不到servlet类。

我的建议 - 采取一些简单的例子并注意其上的目录结构。

答案 2 :(得分:0)

不知道为什么在您的情况下没有提供错误消息。

尝试通过在相应的方法中添加一些带有自定义消息的System.out.println()来调试servlet实例化并请求处理。

例如:

public void init(ServletConfig config) throws ServletException{
  super(config);
  System.out.println("my servlet init() call");
}


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  System.out.println("my servlet doGet() call");
}

重新部署您的servlet并检查tomcat日志中的消息。