testtag.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中添加依赖如下:
再次运行:错误如下:
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’。