2017-08-02 239 views
0

我对JAVA很新,但是我在网络编程方面有一些经验。我正在创建简单的jsp页面,并使用@RequestMapping作为页面查看。但我面临一个例外,我已经搜索了Google,但没有发现可以解决我的问题的商品。 这里是具有完全堆栈跟踪除外:为servlet分配异常 - 在JAVA中进行Web编程

严重:分配例外的servlet [WebAppGraph] 抛出java.lang.ClassNotFoundException:com.WebAppGraph.app在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass (WebappClassLoaderBase.java:1269) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104) 在 org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:508) 在 org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceM anager.java:489) 在 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1041) 在 org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:770) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133) 在 org.apache.catalina.core .StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475) 在 组织。 apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 在 org.apache.catalina.valves.AbstractAccessLogValve。调用(AbstractAccessLogValve.java:625) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 个org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:796) 在 org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1372) 在 org.apache .tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run (ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) 在java.lang.Thread.run(Thread.java:745)

的我的代码的样品:

indexController的。的java

package com.WebAppGraph.app; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class indexController { 

    @RequestMapping("/") 
    public String home() { 
     return "index.jsp"; 
    } 

    @RequestMapping("/test.html") 
    public String test() { 
     return "test.jsp"; 
    } 

} 

Web.xml中

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 
    <servlet> 
     <servlet-name>WebAppGraph</servlet-name> 
     <servlet-class> 
      com.WebAppGraph.app 
     </servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>WebAppGraph</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

WebAppGraph-servlet.xml中

<?xml version="1.0" encoding="UTF-8" ?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:component-scan base-package="com.WebAppGraph.app"></context:component-scan> 

</beans> 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.WebAppGraph.app</groupId> 
    <artifactId>WebAppGraph</artifactId> 
    <packaging>war</packaging> 
    <version>1.0</version> 
    <name>WebAppGraph Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.3.10.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
    <build> 
     <finalName>WebAppGraph</finalName> 
    </build> 
</project> 

文件结构: enter image description here

当我尝试运行我的程序它打开index.jsp页面,但第二页,只有当我写localhost:9000/WebAppGraph/test.jsp但是,当我写localhost:9000/WebAppGraph/test.html它不显示我的测试开。 jsp代替了我上面发布的异常。 任何想法如何解决这个问题?

+1

com.WebAppGraph.app'是一个不是servlet类名的包 –

+0

我应该在这里写什么? –

+0

这里是一个可能的重复和你可能参考的答案: https://stackoverflow.com/questions/24942153/severe-allocate-exception-for-servlet-myservlet-name-java-lang-classnotfounde –

回答

1

更改web.xml文件中servlet-class标记的值。您可以按以下变化(因为我们大多数人使用DispatcherServletservlet-class):

<servlet> 
    <servlet-name>WebAppGraph</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

另外一个事情,如果您使用的弹簧的默认配置,则需要从控制器返回的字符串中删除.jsp功能,如:

@RequestMapping("/") 
public String home() { 
    return "index"; 
} 

@RequestMapping("/test.html") 
public String test() { 
    return "test"; 
} 
3

为了您的servlet映射,你可以做这样的事情在web.xml:

<servlet> 
    <servlet-name>WebAppGraph</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/WebAppGraph-servlet.xml</param-value> 
    </init-param> 
</servlet> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<servlet-mapping> 
    <servlet-name>WebAppGraph</servlet-name> 
    <url-pattern>*.html</url-pattern> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
+0

是' * .html'mendatory?我认为不是 – sunkuet02

+0

对于上述情况,他正在尝试打开localhost:9000/WebAppGraph/test.html,所以我就提到它 –

2

你需要尝试一个spring-mvc hello world教程。 您的班级名称是com.WebAppGraph.app.indexController而不是com.WebAppGraph.app,如果您打算将其放入web.xml <Servlet>标记,则需要将其延伸至javax.servlet.Servlet。你所拥有的是一个Spring bean,注释为Spring MVC控制器而不是Servlet。你希望把Spring MVC的调度的servlet的XML:

<servlet> 
    <servlet-name>Controller</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Controller</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

然后注入在Spring XML与上下文扫描控制器注释(你已经这样做)在web.xml`

+0

不,不是。当我开始打字时,你的答案不存在。如果OP理解一个servlet和一个spring MVC控制器之间的区别,但不是必需的,那将会很好。 –

+1

@ sunkuet02它解释了什么是错误的,而不仅仅是解决问题 –

+0

@ScaryWombat,Yup。这是我的错误。感谢细节。另外,我应该downvote我的答案? – sunkuet02