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

844 阅读5分钟
原文链接: blog.csdn.net

一、前言


最近在整合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依赖如下:

[html] view plain copy print?
  1. <!-- Servlet api -->  
  2. <dependency>  
  3.     <groupId>javax.servlet</groupId >  
  4.     <artifactId>3.1.0</artifactId >  
  5.     <version></version>  
  6.     <scope>provided</scope >  
  7. </dependency>  
  8. <dependency>    
  9.     <groupId>javax.servlet.jsp</groupId >    
  10.     <artifactId>jsp-api</artifactId >    
  11.     <version>2.2</version>    
  12.     <scope>provided</scope >    
  13. </dependency>  
  14. <dependency>  
  15.     <groupId>javax</groupId >  
  16.     <artifactId>javaee-api</artifactId >  
  17.     <version>7.0</version>  
  18. </dependency>           
  19. <!-- JSTL -->  
  20. <dependency>    
  21.     <groupId>javax.servlet</groupId >    
  22.     <artifactId>jstl</artifactId >  
  23.     <type>jar</type>  
  24.     <version>1.2</version>    
  25. </dependency>  
  26. <!-- standard -->  
  27. <dependency>  
  28.     <groupId>taglibs</groupId >  
  29.     <artifactId>standard</artifactId >  
  30.     <type>jar</type>  
  31.     <version>1.1.2</version >  
  32. </dependency>  
  33. <dependency>    
  34.     <groupId>org.glassfish.web</groupId >    
  35.     <artifactId>jstl-impl</artifactId >    
  36.     <version>1.2</version>    
  37.     <exclusions>    
  38.         <exclusion>    
  39.             <artifactId>servlet-api</ artifactId>    
  40.             <groupId>javax.servlet</ groupId>    
  41.         </exclusion>    
  42.         <exclusion>    
  43.             <artifactId>jsp-api</ artifactId>    
  44.             <groupId>javax.servlet.jsp</ groupId>    
  45.         </exclusion>    
  46.         <exclusion>    
  47.             <artifactId>jstl-api</ artifactId>    
  48.             <groupId>javax.servlet.jsp.jstl</ groupId>    
  49.         </exclusion>    
  50.     </exclusions>    
  51. </dependency>    
<!-- 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定义为:

[html] view plain copy print?
  1. <web-app     
  2.   xmlns="http://java.sun.com/xml/ns/javaee"     
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  4.   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
  5.   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">    
<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的声明语句不一样:

[html] view plain copy print?
  1. JSTL1.0的使用方法为:  
  2. <%@ taglib uri="http://java.sun.com/jstl/core" prefix= "c" %>  
  3.   
  4. JSTL1.1的使用方法为:  
  5. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix= "c" %>  
  6.   
  7. JSTL1.2的使用方法为  
  8. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix= "c" %>  
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中去运行,一运行就报错:

[html] view plain copy print?
  1. 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  
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包,复制一个到该目录下就行了。


如果说是报下面这种错的话,基本上就是由于版本不一致所导致的:

[html] view plain copy print?
  1. org.apache.jasper.JasperException:  
  2. java.lang.RuntimeException: org.apache.jasper.JasperException:  
org.apache.jasper.JasperException:
java.lang.RuntimeException: org.apache.jasper.JasperException:

有时候要看EL表达式是否支持,默认开启支持EL表达式支持有:


1、servlet2.4
2、J2EE6


默认不支持EL表达式需要进行如下2种配置中的其一来开启EL:


1、在JSP中加入:

[html] view plain copy print?
  1. <%@ page isELIgnored="false"%>  
<%@ page isELIgnored="false"%>

2、在web.xm中加入:

[html] view plain copy print?
  1. <jsp-config>       
  2.     <jsp-property-group>       
  3.         <url-pattern>*.jsp</url-pattern >       
  4.         <el-ignored>false</el-ignored >       
  5.     </jsp-property-group>       
  6. </jsp-config>  
<jsp-config>     
    <jsp-property-group>     
        <url-pattern>*.jsp</url-pattern>     
        <el-ignored>false</el-ignored>     
    </jsp-property-group>     
</jsp-config>


二、对应关系




Servlet - - Jsp - - EL表达式 - - Tomcat一览表




注:


1,来源自Tomcat官网:tomcat.apache.org/whichversio…

JSTL各个版本与Jsp及Servlet版本之间的依赖关系:



注:


1,来源自百度百科:baike.baidu.com/view/73527.…