封闭
29天前
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html >
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<c:forEach items="${students}" var="s" >
${s} <br>
</c:forEach>
</body>
</html>
package com.Demo;
public class Student {
int rollno;
String name;
@Override
public String toString() {
return "Student [rollno=" + rollno + ", name=" + name + "]";
}
public int getRollno() {
return rollno;
}
public void setRollno(int rollno) {
this.rollno = rollno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(int rollno, String name) {
super();
this.rollno = rollno;
this.name = name;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<display-name>JSTLexample</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
package com.Demo;
import java.io.IOException;
import java.util.Arrays;
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;
@WebServlet("/DemoServlet")
public class DemoServlet extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//String name = "Navin";
List <Student> studs = Arrays.asList(new Student(1, "brandon"), new Student(2, "Micheal"), new Student (3, "Charles"));
request.setAttribute("students", studs);
RequestDispatcher rd = request.getRequestDispatcher("display.jsp");
rd.forward(request, response);
}
}
.所以${}确实能用。但我使用的 JSTL jar 文件却让 ${} 无法正常工作了。这些是我的JSTL jar文件:jstl-1.2 (1).jar, jstl-impl-1.2.jar, jstl-standard.jar。我是按照Navin教程上的Servlet &JSP教程commonslib文件夹里有server.xml(显然不是)或你的应用程序的WEB-INFlib。然后调用你希望使用的每个标签前缀的名称在你的JSP页面的顶部声明。Tomcat有几种实现的方法。
另外,你的doctype应该是
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Yout .tld标签库描述符应该在WEB-INF文件夹中。
在你的web.xml文件中定义taglib的位置。
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</jsp-config>
另外,你的bean类应该在web.xml中声明,在顶部的页面中也要声明调用它的页面声明。
还不错的一点是,如果出了问题,可以重新检查上面的内容。
你所做的servlet是一个 GET请求 servlet,它们通过以下方式在URL上传递参数
? "name=**valuOFthisPart&anid=**somethinHere&terminus=。
如果您使用${Param.student}作为学生添加到网址上的"? "后面,可能会对EL有用,就像这样。
**?学生=name=**valuOFthisPart&next1=somethinHere&next2=somethinHere&terminus=。
POST servlet不能携带参数 上的URL,并且是你想要做的代码,所以是什么 request.setAttribute的设置是为POST请求而做的(POST请求确实携带标记)。
而且,request对象的setAttribute可以通过其类的接口来实现,也可以通过包装子类在类级进行设置,如next的
javax.servlet.ServletRequestWrapper requestWrpp = new javax.servlet.ServletRequestWrapper(request);
requestWrpp.setAttribute("students", studs);
不过,虽然更多的现代版本的web容器可以识别复杂的类型,如List和Map(但可能不包括学生类),你可能可以通过以下方式使用那里的代码 我依稀记得我记得在JSP处理中使用复杂对象的条款是,它被理解为可转换为字符串.Student是无法识别的Web应用程序解析器规则,但是如果你写Student扩展(Map int,String),那么运行时和编译器可能能够使用该设置里面作为一个(Map K,V)。 实际上,这是不可能的,因为你在JSP处理之前尝试在servlet中通过响应[ !!除非Student类只是个 薮猫支持类 在classes文件夹中。(不是 豆瓣语法类)见下一段]。
你试图用bean的方式来使用一个类,而且bean必须在web.xml和页面中声明,并且servlet也必须用classes或classesbeans文件夹中的学生对象引用来通知!!!!!。 如果它是一个bean,它应该在bean文件夹中(如果它不是一个bean,只是一个支持处理类,应该在classes中与servlet打包或不打包),并由JSP解析器中的响应调用,但正确加载,正确更新的当前实例,它在Web应用程序的用户会话中应该被使用(JSF更容易做到这一点)。你可以通过获取web app上下文和初始实例线程来获取当前session和servlet实例使用的bean,找到你想要的bean,它的当前实例和当前状态(要求是session bean,除非值是常数,或者它只通过set get处理即时输出)来获取它的当前值。 Bean类必须在整个app配置中声明,与servlet无异,但不同的是有严格的运行时和语法的声明规则。
最后说明
// the first argument should be a string NOT an int
req.setAttribute("String Object",(java.lang.Object)anObject);
/注意:该对象必须是可识别的java语言核心类转换为String !!!
关于post请求,我只想说一下,其实它可以携带一个查询字符串,但在Java框架内被认为是一个奇怪的动作。