java web基础 --- forEach标签
2015-12-27 20:13
483 查看
testtag.jsp
SimpleFormServlet.java
原文:http://www.javacoder.cn/?p=195
在jsp 中使用el表达式都好几年了,原来都是将需要的jar直接放在WEB-INF/lib目录下,最近转向maven构建。一下子各种问题。
detail.jsp 的内容如下:
<%@ page language=”java” pageEncoding=”UTF-8″%>
<%@ page isELIgnored =”false” %>
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
<c:out value=”${request.reportDataKey}”/><br/>
运行时提示:
ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
网上搜索一番,
说是jstl 需要手动引入,于是在pom.xml中添加依赖如下:
再次运行:错误如下:
java.lang.NoClassDefFoundError: org/apache/taglibs/standard/tag/rt/core/Out
刚才我们只是导入了jstl-api,而没有导入jstl的实现,所以再导入jstl 的实现。去mvnrepository上找jstl 的实现,基本上有两个版本,一个是glassfish 的jstl-impl, 另一个是apache的taglibs-standard-impl,一直犹豫不决该用谁,最后在stackoverflow.com/a/25374024/1443527上发现网友分享了他实现的经验,他用的是glassfish版本,所以我们也引人这个。由于tomcat7是兼容j2ee 3.0规范的,所以我们将jstl 依赖的东西给去除掉,防止和tomcat自身的servlet jar包冲突,改正后的依赖为
哈哈,运行正确。
顺便说一下jstl-impl-1.2.jar 和taglibs-standard-impl-1.2.1.jar 的区别,这两个包的内容很相似,后者应该是前者的一个再打包,因为Apache的taglibs工程从2009年以后一直处于停止状态。
如果你要引人后者,那么依赖应该为:
顺便提一下:你知道web.xml配置中的url-pattern的‘/’和‘/*’的区别吗?
哎,基本功不扎实,这个问题折腾了好久。‘/’表示该项目的所有请求路径;‘/*’表示只能有一级子路径,它匹配’/a.jsp’但是不匹配‘/jsp/a.jsp’。
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP标签</title> </head> <body> <h1>JSP标签测试</h1> <table> <tr> <td>姓名</td> <td>职业</td> <td>年龄</td> </tr> <c:forEach var="person" begin="0" items="${requestScope.pList }"> <tr> <td><c:out value="${person.name }"></c:out></td> <td><c:out value="${person.occupy }"></c:out></td> <td><c:out value="${person.age }"></c:out></td> </tr> </c:forEach> </table> </body> </html>
SimpleFormServlet.java
package com.web1.hello; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.web1.datamodel.Pserson; /** * Servlet implementation class SimpleFormServlet */ @WebServlet("/SimpleFormServlet") public class SimpleFormServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public SimpleFormServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("jspcontent", "I am JSP"); String formPage = "/pages/result.jsp"; request.setAttribute("name_str", request.getParameter("name_str")); request.setAttribute("occyp_str", request.getParameter("occyp_str")); request.setAttribute("age_num", request.getParameter("age_num")); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(formPage); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String formPage = "/pages/testtag.jsp"; Pserson person1 = new Pserson(); person1.setName("张三"); person1.setOccupy("工程师"); person1.setAge(22); Pserson person2 = new Pserson(); person2.setName("李四"); person2.setOccupy("教师"); person2.setAge(24); Pserson person3 = new Pserson(); person3.setName("王五"); person3.setOccupy("程序猿"); person3.setAge(27); List<Pserson> pList = new ArrayList<Pserson>(); pList.add(person1); pList.add(person2); pList.add(person3); request.setAttribute("pList", pList); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(formPage); dispatcher.forward(request, response); } }
正确配置Jstl的Maven依赖
原文:http://www.javacoder.cn/?p=195在jsp 中使用el表达式都好几年了,原来都是将需要的jar直接放在WEB-INF/lib目录下,最近转向maven构建。一下子各种问题。
detail.jsp 的内容如下:
<%@ page language=”java” pageEncoding=”UTF-8″%>
<%@ page isELIgnored =”false” %>
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
<c:out value=”${request.reportDataKey}”/><br/>
运行时提示:
ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
网上搜索一番,
说是jstl 需要手动引入,于是在pom.xml中添加依赖如下:
12345 | <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> |
java.lang.NoClassDefFoundError: org/apache/taglibs/standard/tag/rt/core/Out
刚才我们只是导入了jstl-api,而没有导入jstl的实现,所以再导入jstl 的实现。去mvnrepository上找jstl 的实现,基本上有两个版本,一个是glassfish 的jstl-impl, 另一个是apache的taglibs-standard-impl,一直犹豫不决该用谁,最后在stackoverflow.com/a/25374024/1443527上发现网友分享了他实现的经验,他用的是glassfish版本,所以我们也引人这个。由于tomcat7是兼容j2ee 3.0规范的,所以我们将jstl 依赖的东西给去除掉,防止和tomcat自身的servlet jar包冲突,改正后的依赖为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jstl-impl</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> </exclusion> </exclusions> </dependency> |
顺便说一下jstl-impl-1.2.jar 和taglibs-standard-impl-1.2.1.jar 的区别,这两个包的内容很相似,后者应该是前者的一个再打包,因为Apache的taglibs工程从2009年以后一直处于停止状态。
如果你要引人后者,那么依赖应该为:
1 2 3 4 5 6 7 8 9 10 | <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-spec</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-impl</artifactId> <version>1.2.1</version> </dependency> |
哎,基本功不扎实,这个问题折腾了好久。‘/’表示该项目的所有请求路径;‘/*’表示只能有一级子路径,它匹配’/a.jsp’但是不匹配‘/jsp/a.jsp’。
相关文章推荐
- [图说Java](2)Java中字符串为什么是不可变的
- SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数
- Spring配置文件详解:<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:annotation-driven />
- spring mvc下shiro的session,request等问题
- LinkedList分析
- Java的安装及环境变量的配置
- for循环中i=0与i=arr.length容易被忽视的bug
- 最大熵的Java实现
- Java多线程-并发中的集合详解
- Java多线程中异常的处理UncaughtExceptionHandler
- struts2基于xml配置方式对Action方法进行校验
- Spring之使用JDBC访问关系数据
- 分布式环境下Spark与HDFS的配置
- struts2验证框架将验证信息输出到指定位置
- Java运行时环境初始化出现错误
- Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检測程序执行和函数调用次数计数
- java实现八皇后问题(递归和循环两种方式)
- java中String源码分析
- R.java 不能自动更新的问题
- Spring scope详解