Tomcat,Jstl,Servlet-api,jsp-api,standard各版本支援
阿新 • • 發佈:2019-01-07
一、前言
最近在整合SSM框架,然後引入了SiteMesh2.4佈局框架,然後就引出了一系列問題,先是jstl版本報錯,然後就是執行專案JSP頁面報錯等等這一些問題都是由於Tomcat,Jstl,Servlet-api,jsp-api,standard這幾者之間的關係導致的。我在專案中引用了jstl1.2,servlet-api3.1.0,jsp-api2.2,standard1.1.2 mavne依賴如下:
<!-- Servlet api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>3.1.0</artifactId> <version></version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <type>jar</type> <version>1.2</version> </dependency> <!-- standard --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <type>jar</type> <version>1.1.2</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jstl-impl</artifactId> <version>1.2</version> <exclusions> <exclusion> <artifactId>servlet-api</artifactId> <groupId>javax.servlet</groupId> </exclusion> <exclusion> <artifactId>jsp-api</artifactId> <groupId>javax.servlet.jsp</groupId> </exclusion> <exclusion> <artifactId>jstl-api</artifactId> <groupId>javax.servlet.jsp.jstl</groupId> </exclusion> </exclusions> </dependency>
Servlet版本用的是3.0,web.xml中的scheme定義為:
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
由於JSTL1.0和JSTL1.1的宣告語句不一樣:
JSTL1.0的使用方法為: <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> JSTL1.1的使用方法為: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> JSTL1.2的使用方法為 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
我在JSP頁面中引用的就是jstl1.1的語法,然後放到Tomcat8中去執行,一執行就報錯:
org.apache.jasper.JasperException: /register.jsp (line: 10, column: 1) The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
最後發現把語法改成1.0的就能執行,說明Tomcat8不支援1.1,然後發現Tomcat8/lib目錄下並沒有jstl1.1的jar包 ,複製一個到該目錄下就行了。
如果說是報下面這種錯的話,基本上就是由於版本不一致所導致的:
org.apache.jasper.JasperException:
java.lang.RuntimeException: org.apache.jasper.JasperException:
有時候要看EL表示式是否支援,預設開啟支援EL表示式支援有:
1、servlet2.4
2、J2EE6
預設不支援EL表示式需要進行如下2種配置中的其一來開啟EL:
1、在JSP中加入:
<%@ page isELIgnored="false"%>
2、在web.xm中加入:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>false</el-ignored>
</jsp-property-group>
</jsp-config>
二、對應關係
Servlet - - Jsp - - EL表示式 - - Tomcat一覽表
注:
JSTL各個版本與Jsp及Servlet版本之間的依賴關係:
注: