您的位置:首页 > 编程语言 > Java开发

java web基础 --- forEach标签

2015-12-27 20:13 483 查看
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中添加依赖如下:

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>

顺便提一下:你知道web.xml配置中的url-pattern的‘/’‘/*’的区别吗?

哎,基本功不扎实,这个问题折腾了好久。‘/’表示该项目的所有请求路径;‘/*’表示只能有一级子路径,它匹配’/a.jsp’但是不匹配‘/jsp/a.jsp’。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: