天天看點

Tomcat,Jstl,Servlet-api,jsp-api,standard各版本支援

一、前言

最近在整合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>
           

二、對應關系

Tomcat,Jstl,Servlet-api,jsp-api,standard各版本支援

Servlet - - Jsp - - EL表達式 - - Tomcat一覽表

Tomcat,Jstl,Servlet-api,jsp-api,standard各版本支援

注:

1,來源自Tomcat官網:http://tomcat.apache.org/whichversion.html

JSTL各個版本與Jsp及Servlet版本之間的依賴關系:

Tomcat,Jstl,Servlet-api,jsp-api,standard各版本支援

注:

1,來源自百度百科:http://baike.baidu.com/view/73527.htm