弹簧罐';t使用javax.servlet编译jsp

弹簧罐';t使用javax.servlet编译jsp,java,spring,jsp,servlets,gradle,Java,Spring,Jsp,Servlets,Gradle,我有一个春季项目,一切顺利 我的gradle依赖项编译有以下内容 compile 'org.springframework:spring-core:4.1.2.RELEASE', 'org.springframework:spring-web:4.1.2.RELEASE', 'org.springframework:spring-webmvc:4.1.2.RELEASE', 'org.springframework:spring-orm:4.1.2

我有一个春季项目,一切顺利

我的gradle依赖项编译有以下内容

compile 'org.springframework:spring-core:4.1.2.RELEASE',
        'org.springframework:spring-web:4.1.2.RELEASE',
        'org.springframework:spring-webmvc:4.1.2.RELEASE',
        'org.springframework:spring-orm:4.1.2.RELEASE',
        'org.springframework:spring-context:4.1.2.RELEASE',
        'org.springframework:spring-tx:4.1.2.RELEASE',
        'commons-dbcp:commons-dbcp:1.4',
        'mysql:mysql-connector-java:5.1.6',
        'org.hibernate:hibernate-core:4.3.7.Final'
我的web.xml是

<web-app
    id="WebApp_ID"
    version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Test Restful Application</display-name>

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

    <servlet-mapping>
        <servlet-name>test-servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/test-servlet.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <welcome-file-list>
        <welcome-file>/WEB-INF/view/default.jsp</welcome-file>
    </welcome-file-list>

    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/view/default.jsp</location>
    </error-page>

</web-app>
显然,它将jsp视为.java文件

编辑2:

这是我的jsp文件

<html>
<head>
    <title>Error</title>
</head>
<body>
<h3>Wrong page</h3>
</body>
</html>

错误
错页
“显然,它将jsp视为.java文件。”

不,它将JSP翻译成Java,然后编译。如果JSP包含错误,那么这些错误很可能会导致Java代码中包含编译错误

您需要做的是查看生成的JSP源代码,并找出Java编译错误的含义。然后找出JSP中相应的错误,并在那里修复问题


在本例中,您的JSP似乎试图调用
请求
对象上不存在的方法。编译器是正确的。在
HttpServletRequest
API中没有名为
getDispatcherType()
的方法,因此尝试调用它的JSP代码不正确。

如何修复:还原更改。您已经依赖于
javax.servlet

javax.servlet:javax.servlet api:3.0.1
是的依赖项(请参阅“依赖”一节),因此它可以作为可传递依赖项提供给您

为什么会这样:同一个jar有两个相互冲突的依赖项(
HttpServletRequest
在Servlet API 3.0中有方法,而在API 2.5中没有)。发件人:

应检测同一jar的冲突版本,并且 已解决或导致异常。如果不使用传递依赖项 在管理方面,版本冲突未被检测到,而且通常是偶然发生的 类路径的顺序将决定依赖项的版本 我会赢的。在一个大型项目中,许多开发人员都在更换 依赖关系,成功的构建将少之又少 依赖关系的顺序可能直接影响生成是否成功 失败(或缺陷是否在生产中出现或消失)


请显示堆栈跟踪的其余部分。您应该能够在日志文件中找到实际的JSP编译错误。我编辑了问题并添加了我的JSP文件。我正在做的事情真的有错吗?你确定你有正确的JSP文件吗?它是否与编译器正在讨论的
default_jsp.java
文件有任何相似之处?是的,我的default.jsp将显示错误页面。这就是为什么我把它映射到web.xml中的错误页面404。这就是为什么我感到困惑。我拥有的代码其实并不复杂,这就是为什么我对它不起作用感到困惑的原因。例如,我在它下面的一个项目工作得很好,当我尝试添加“javax.servlet:servlet api:2.5”时,它也停止了工作。很好,您通常不应该将servlet api JAR文件添加到servlet的运行时类路径。web容器的类路径上应该已经有了所有这些API。。。它将使用最适合web容器的版本。
Stacktrace:] with root cause
 org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [42] in the generated java file: [system\tomcat\Tomcat_(1)_web\work\Catalina\localhost\ROOT\org\apache\jsp\WEB_002dINF\view\default_jsp.java]
The method getDispatcherType() is undefined for the type HttpServletRequest

Stacktrace:
    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:199)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:450)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:361)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
<html>
<head>
    <title>Error</title>
</head>
<body>
<h3>Wrong page</h3>
</body>
</html>