简体   繁体   English

struts2 spring项目在jetty和tomcat上运行

[英]struts2 spring project to run on jetty and tomcat

I am working on a web project which I can successfully deploy on Tomcat. 我正在开发一个可以在Tomcat上成功部署的Web项目。 Now I want to run the project in jetty. 现在我想在jetty中运行该项目。 I created a main method which starts jetty. 我创建了一个启动jetty的main方法。 jetty starts at port 8080, but showing error 500 JSP support not configured so i add jetty jsp dependency. jetty从端口8080开始,但显示error 500 JSP support not configured所以我添加jetty jsp依赖。 then it throw an exception org.apache.jasper.JasperException: /common/taglibs.jsp(2,80) PWC6188: The absolute uri: http://www.springframework.org/security/tags cannot be resolved in either web.xml or the jar files deployed with this application (where taglib.jsp contains different tag-libs) 然后它抛出异常org.apache.jasper.JasperException: /common/taglibs.jsp(2,80) PWC6188: The absolute uri: http://www.springframework.org/security/tags cannot be resolved in either web.xml or the jar files deployed with this application (其中taglib.jsp包含不同的tag-libs)

Then When I run it on tomcat it starts up with some info INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined 然后当我在tomcat上运行它时会启动一些信息INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined

and when I start it gives java.lang.NoSuchMethodError: org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(Ljava/lang/String;Ljava/lang/Class;Ljavax/servlet/jsp/PageContext;Lorg/apache/jasper/runtime/ProtectedFunctionMapper;Z)Ljava/lang/Object; 当我开始时它给出java.lang.NoSuchMethodError: org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(Ljava/lang/String;Ljava/lang/Class;Ljavax/servlet/jsp/PageContext;Lorg/apache/jasper/runtime/ProtectedFunctionMapper;Z)Ljava/lang/Object;

maven dependency maven依赖

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>${jetty.version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-webapp</artifactId>
    <version>${jetty.version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jsp</artifactId>
    <version>${jettyjsp.version}</version>
</dependency>

EDIT 1: when I add <scope>provided</scope> to the dependency tomcat starts successfully but when starting jetty it still gives the following stack trace 编辑1:当我将<scope>provided</scope>到依赖关系时,tomcat成功启动但是当启动jetty时它仍然提供以下堆栈跟踪

org.apache.jasper.JasperException: /common/taglibs.jsp(2,80) PWC6188: The absolute uri: http://www.springframework.org/security/tags cannot be resolved in either web.xml or the jar files deployed with this application
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:89)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:375)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:169)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:429)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:234)
    at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:499)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:579)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1649)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:182)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:239)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:156)
    at org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:391)
    at org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:428)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:571)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1649)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:182)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:239)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:140)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:204)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:431)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:608)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:476)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:366)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.eclipse.jetty.servlet.JspPropertyGroupServlet.service(JspPropertyGroupServlet.java:127)

You are facing different problems. 你面临着不同的问题。

Jetty concerns 码头问题

You must NOT declare jetty as a dependency, but as a plugin, if you really want to run it as a server. 您不能将jetty声明为依赖项,而是作为插件,如果您真的想将其作为服务器运行。

Jetty would work just adding these lines to your pom.xml : Jetty只会将这些行添加到您的pom.xml中:

Recent version of plugin 最新版本的插件

<build>
    <!-- MORE CONF HERE -->
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.0.0.v20130308</version>
        </plugin>

        <!-- Maybe more plugins here -->
    </plugins>
    <!-- EVEN MORE Build CONF HERE -->
</build>

Or older versions (like in my projects) 或旧版本(如我的项目)

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.3.v20120416</version>
</plugin>

They are many available plugin configurations, but the basic one is sufficient. 它们是许多可用的插件配置,但基本配置就足够了。

More info : 更多信息 :

Servlet API issues Servlet API问题

Your java.lang.NoSuchMethodError means that you are trying to run your app, with an embedded Servlet API in a version, say version A, against a server running it in another one, say version B. These versions are incompatible. 您的java.lang.NoSuchMethodError意味着您正在尝试运行您的应用程序,在版本A中使用嵌入式Servlet API,比如在另一个版本中运行它的服务器,比如版本B.这些版本是不兼容的。

You should declare Servlet API only as provided, not the default scope (compile), and make sure that your server support it. 您应该仅在提供时声明Servlet API,而不是默认范围(编译),并确保您的服务器支持它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM