我有一个GWT应用程序(由roo生成),我决定用Spring Security保护它。 Roo生成一个login.jspx页面作为安全设置的一部分,这个jspx使用了一些基本的JSTL标记库。
在开发模式下运行时,基础Jetty服务器显然不喜欢这样。使用以下Maven依赖项
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<classifier/>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<classifier/>
</dependency>
我得到了
java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
我的猜测是jstl-impl依赖项与Web容器已经提供的依赖项冲突,但当我将其范围更改为提供时,我得到:
org.apache.jasper.JasperException: /WEB-INF/views/login.jspx(22,69) The attribute prefix fn does not correspond to any imported tag library
有人让这个成功地工作了吗?
P.S。我听说有传言你可以将应用程序导出到Tomcat,它运行正常,但GWT编译可能是一个耗时的操作,所以在开发模式下工作会很棒。
答案 0 :(得分:5)
显然,支持GWT开发模式的Jetty服务器已经在类路径上的某个地方使用了JSTL 1.1。如果您更改Roo默认添加的Maven依赖项
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<classifier/>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<classifier/>
</dependency>
到
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.1</version>
<classifier/>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.1</version>
</dependency>
您将拥有一个有效的GWT + JSTL环境!