我试图在JSP中使用表达式语言回答一个问题。我尝试了一些代码,但它无法正常工作。有人可以帮助我吗?
问题 - 来源= How to call servlet on jsp page load
我想打电话给servlet' latest_products'在index.jsp页面的加载。这个servlet在List中有记录。我想将此List传递给index.jsp。但是我不想在url中显示servlet的名称。有什么方法可以做到这一点。
预期输出 - 标题加上三个产品名称的列表。
实际输出 - 仅限标题。
我尝试了什么 -
的Servlet
public class ProductList extends HttpServlet {
private static final long serialVersionUID = 1L;
public ProductList() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<String> products = new ArrayList<String>();
products.add("Car");
products.add("Gun");
products.add("Shades");
request.setAttribute("productsList", products);
}
}
JSP:
<%@ page language="java" contentType="blah..."%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "blah...">
<html>
<head>
<meta http-equiv="blah...">
</head>
<body>
<c:import url="/ProductList" />
<c:set var="myProducts" scope="request" value="${param.productsList}"/>
<h1>List of products from servlet</h1>
<c:forEach var="product" items= "${myProducts}" varStatus="i">
${product}<br>
</c:forEach>
</body>
</html>
除此之外的一个小问题,当我在Encountered illegal body of tag "c:set" tag, given its attributes
标记后面附加</c:set>
的c:set标记时,为什么会出现错误</c:foreach>
?我认为c:set就像一个带有范围的代码块。但是,它似乎不是。
感谢。
答案 0 :(得分:2)
尝试
<c:set var="myProducts" value="${requestScope.productsList}" />
或
<c:set var="myProducts" scope="request" value="${productsList}" />
而不是
<c:set var="myProducts" scope="request" value="${param.productsList}" />
从请求范围获取属性值。只有请求参数在隐式对象param
中可用。您无法使用隐式对象param
访问请求属性。
为什么我会收到错误标记
c:set
标记的非法主体,当我在</c:set>
标记后面附加</c:foreach>
的c:set标记时,会给出其属性?
因为它已经关闭,如下所示(在末尾看一个斜线),c:set
没有开始标记。
<c:set var="myProducts" scope="request" value="${param.productsList}"/>
<c:import url="/ProductList" />
或<jsp:include page="/ProductList" />
是GET请求,它们将调用Servlet的doGet()
方法,并且根据您的代码为空,这就是JSP页面上没有显示任何内容的原因。
从doPost()
方法调用doGet()
方法或提供doGet()
方法的实现。