【问题标题】:Regarding error in servlet on execution关于 servlet 执行时的错误
【发布时间】:2012-07-15 14:51:19
【问题描述】:

我已经使用 servlet 开发了以下应用程序,但是在输入用户名和密码后,我没有进入第二页..请告知...

第一个 servlet 是..

package Demo;

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

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


public class SendRedirectServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse
            response)throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter pw = response.getWriter();
          String name = request.getParameter("username");
          String password = request.getParameter("password");
          if(name.equals("james")&& password.equals("abc")){
          response.sendRedirect("Demo/ValidUserServlet");
          }
          else{
          pw.println("u r not a valid user");
          }
          }
}

第二个 servlet 是 ..

package Demo;

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

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


public class ValidUserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse
              response)throws ServletException, IOException {
              PrintWriter pw = response.getWriter();
              pw.println("Welcome to roseindia.net " + " ");
              pw.println("how are you");
            }

}

login.html 文件是……

<html>

<head>
<title>New Page 1</title>
</head>

<body>

<form method="post" action="SendRedirectServlet">
  <p>Enter your name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   <input type="text" name="username" size="20"/></p>
  <p>Enter your password&nbsp; <input type="text" name="password"
   size="20"/></p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  &nbsp;&nbsp;
  <input type="submit" value="Submit" name="B1"/></p>
</form>

</body>

</html>

最后 web.xml 是..

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>Zulfiqar</servlet-name>
    <servlet-class>Demo.SendRedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Zulfiqar</servlet-name>
    <url-pattern>/SendRedirectServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>Demo.ValidUserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/ValidUserServlet</url-pattern>
  </servlet-mapping>
</web-app>

我在第一页 (http://localhost:9050/SendRedirect/Login.html) 中输入名称和密码,但单击提交按钮后出现以下错误..

INFO: Marking servlet Zulfiqar as unavailable
15 Jul, 2012 8:14:56 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet Zulfiqar
java.lang.ClassNotFoundException: Demo.SendRedirectServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
15 Jul, 2012 8:20:26 PM org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet Zulfiqar is currently unavailable

完成了建议的更改,但仍然出现此错误...

INFO: Marking servlet Zulfiqar as unavailable
15 Jul, 2012 9:11:48 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet Zulfiqar
java.lang.ClassNotFoundException: Demo.SendRedirectServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
15 Jul, 2012 10:06:42 PM org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet Zulfiqar is currently unavailable

【问题讨论】:

    标签: java tomcat servlets


    【解决方案1】:

    首先,不鼓励使用大写/标题大小写的包名称。始终使用小写字母来定义包名。

    第二,改变

    response.sendRedirect("Demo/ValidUserServlet");
    

    response.sendRedirect("/ValidUserServlet");
    

    应该按照您的web.xml 中的说明工作。

    Tomcat 存在一些热部署问题,因此它有时无法加载实际存在于类路径中的类。

    所以,请检查您的 tomcat 是否已加载新的 servlet 类。 再次编译并发布 Web 项目。

    java.lang.ClassNotFoundException: Demo.SendRedirectServlet
    

    检查你的目录结构。

    SendRedirectServlet 是否存在于Demo 目录下/WEB-INF/class/Demo/SendRedirectServlet

    【讨论】:

      【解决方案2】:

      response.sendRedirect("Demo/ValidUserServlet");

      应该改为

      response.sendRedirect("/ValidUserServlet");

      只有这个 url 模式会调用 servlet,如您的 web.xml 文件部分所述:

      <servlet>     
          <servlet-name>Hello</servlet-name>     
          <servlet-class>Demo.ValidUserServlet</servlet-class>   
      </servlet>   
      <servlet-mapping>     
          <servlet-name>Hello</servlet-name>     
          <url-pattern>/ValidUserServlet</url-pattern>   
      </servlet-mapping>
      

      但是在按下提交按钮后,您的错误似乎来自另一个 servlet 对吧? 检查 servlet 类是否存在于 WEB-INF/classes 的 Demo 文件夹中,如 Hardik 所述。

      如果您从 Eclipse 运行项目,请对项目进行清理和重建。大多数时候,那个固定的课程对我来说没有发现错误。

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 2017-12-31
        • 1970-01-01
        • 2013-01-02
        • 1970-01-01
        • 2023-04-01
        • 2011-01-14
        • 1970-01-01
        • 2013-05-29
        相关资源
        最近更新 更多