本文代码转载自 《Servlet、JSP和Spring MVC初学指南》 页面渲染基本就是要实现找到写入资源文件的接口javax.servlet.RequestDispatcher 其功能为在服务端从客户端接受requests 并将其发送到any resourses(servlet/ HTML file/ JSP file) 该对象由servlet容器创建。 其有两种方法forward(ServletRequest request, ServletResponse response) include(ServletRequest request, ServletResponse response) 前者主要应用于进行后续处理(forward),即最后展示的页面内容为“跳转”(处理)后的, 后者主要应用于将后续进行处理的内容包含在前面的servlet HttpServletRequest.setAttribute(String, Object) 所设置的attribute是不能以客户端方式察觉的(与HttpServletRequest.setParameter相对) 而处于对象传递的考虑可以选择前者。 下面是一个使用jsp el表达式的渲染简单实例(使用isELIgnored ="false"开启对el表达式的支持),若干隐式对象不述。
package model; /** * Created by admin on 2017/2/16. */ public class Address { private String streetName; private String streetNumber; private String city; private String state; private String zipCode; private String country; public String getStreetName(){return streetName;} public void setStreetName(String streetName){this.streetName = streetName;} public String getStreetNumber(){return streetNumber;} public void setStreetNumber(String streetNumber){this.streetNumber = streetNumber;} public String getCity(){return city;} public void setCity(String city) { this.city = city; } public String getState(){return state;} public void setState(String state){this.state = state;} public String getZipCode(){return zipCode;} public void setZipCode(String zipCode){this.zipCode = zipCode;} public String getCountry(){return country;} public void setCountry(String country){this.country = country;} }
package model; /** * Created by admin on 2017/2/16. */ public class Employee { private int id; private String name; private Address address; public int getId(){return id;} public void setId(int id){this.id = id;} public String getName(){return name;} public void setName(String name){this.name = name;} public Address getAddress(){return address;} public void setAddress(Address address){this.address = address;} }
package servlet; import java.io.IOException; import java.util.HashMap; 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 model.Address; import model.Employee; /** * Created by admin on 2017/2/16. */ @WebServlet(urlPatterns = {"/employee"}) public class EmployeeServlet extends HttpServlet { private static final int serialVersionUID = -5392874; @Override public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ Address address = new Address(); address.setStreetName("Rue D'Anjou"); address.setStreetNumber("5090B"); address.setCity("Brossard"); address.setState("Quebec"); address.setZipCode("A1A B2B"); address.setCountry("Canada"); Employee employee = new Employee(); employee.setId(1099); employee.setAddress(address); employee.setName("Charles Unijeye"); request.setAttribute("employee", employee); HashMap capitals = new HashMap(); capitals.put("China", "Beijing"); capitals.put("Austria", "Vienna"); capitals.put("Australia", "Canberra"); capitals.put("Canada", "Ottawa"); request.setAttribute("capitals", capitals); RequestDispatcher rd = request.getRequestDispatcher("/employee.jsp"); rd.forward(request, response); } }
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored ="false" %> <html> <head> <title>Employee</title> </head> <body> accept-langage: ${header['accept-language']} <br/> session id: ${pageContext.session.id} <br/> employee: ${requestScope.employee.name}, ${employee.address.city} <br/> capital: ${capitals["Canada"]} </body> </html>
上面是POJO情形下的JSP渲染示例,对于一般容器的JSP迭代渲染可以通过结合 JSP标准标签库的若干迭代标签实现,下面是对于List Map给出的简单示例, Servlet类的实现与上例相同。
package model; /** * Created by admin on 2017/2/16. */ public class Book { private String isbn; private String title; private double price; public Book(String isbn, String title, double price){ this.isbn = isbn; this.title = title; this.price = price; } public String getIsbn(){return isbn;} public void setIsbn(String isbn){this.isbn = isbn;} public String getTitle(){return title;} public void setTitle(String title){this.title = title;} public double getPrice(){return price;} public void setPrice(double price){this.price = price;} }
package servlet; /** * Created by admin on 2017/2/16. */ 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 model.Book; @WebServlet( urlPatterns = {"/books"} ) public class BooksServlet extends HttpServlet { private static final int serialVersionUID = -234237; @Override public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{ List<Book> books = new ArrayList<>(); Book book1 = new Book("978-0980839616", "Java 7: A Biginner's Tutorial", 45.00); Book book3 = new Book("978-0975212820", "Dimensional Data Warehousing with MySQL: A Tutorial", 39.95); Book book2 = new Book("978-0980331608", "Struts 2 Design and Programming: A Tutorial", 49.95); books.add(book1); books.add(book2); books.add(book3); request.setAttribute("books", books); RequestDispatcher rd = request.getRequestDispatcher("/books.jsp"); rd.forward(request, response); } }
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Book List</title> <style> table, tr, td{ border: 1px solid brown; } </style> </head> <body> Books in Simple Table <table> <tr><td>ISBN</td><td>Title</td>></tr> <c:forEach items="${books}" var = "book"> <tr> <td>${book.isbn}</td> <td>${book.title}</td> </tr> </c:forEach> </table> <br/> Books in Styled Table <table> <tr style="background: #ababff"> <tb>ISBN</tb> <tb>Title</tb> </tr> <c:forEach items="${books}" var = "book" varStatus="status"> <c:if test="${status.count%2 == 0}"> <tr style="background: #eeeeff"> </c:if> <c:if test="${status.count%2!=0}"> <tr style="background: #dedeff"> </c:if> <td>${book.isbn}</td> <td>${book.title}</td> </tr>> </c:forEach> </table> <br/> ISBNs only: <c:forEach items="${books}" var = "book" varStatus="status"> ${book.isbn}<c:if test="${!status.last}">,</c:if> </c:forEach> </body> </html>
package servlet; /** * Created by admin on 2017/2/16. */ import java.io.IOException; import java.io.StringReader; import java.util.HashMap; import java.util.Map; 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( urlPatterns = {"/bigCities"} ) public class BigCitiesServlet extends HttpServlet { private static final int serialVersionUID = 112233; @Override public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{ Map<String, String> capitials = new HashMap<>(); capitials.put("Indonesia", "Jakarta"); capitials.put("Malaysis", "Kuala Lumpur"); capitials.put("Thailand", "Bangkok"); request.setAttribute("capitals", capitials); Map<String, String[]> bigCities = new HashMap<>(); bigCities.put("Australia", new String[]{"Sydney", "Melbourne", "Perth"}); bigCities.put("New Zealand", new String[]{"Auckland", "Christchurch", "Wellington"}); bigCities.put("Indonesia", new String[]{"Jakarta", "Surabaya","Medan"}); request.setAttribute("capitals", capitials); request.setAttribute("bigCities", bigCities); RequestDispatcher rd = request.getRequestDispatcher("/bigCities.jsp"); rd.forward(request, response); } }
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <%@ taglib uri ="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>Big Cities</title> <style> </style> </head> <body> Capitals <table> <tr style="background: #448755;color: white;font-weight:bold"> <td>Country</td> <td>Capital</td> </tr> <c:forEach items="${capitals}" var = "mapItem"> <tr> <td>${mapItem.key}</td> <td>${mapItem.value}</td> </tr> </c:forEach> </table> <br/> Big Cities <table> <tr style="background: #448755;color: white;font-weight: bold;"> <td>Country</td> <td>Cities</td> </tr> <c:forEach items="${bigCities}" var = "mapItem"> <tr> <td>${mapItem.key}</td> <td> <c:forEach items="${mapItem.value}" var = "city" varStatus="status"> ${city}<c:if test="${status.last}">,</c:if> </c:forEach> </td> </tr> </c:forEach> </table> </body> </html>
关于使用JSP进行简单页面渲染的例子亦可见
Webcollector + Spring + MVC 搭建应用初探(六)(Lenskit 推荐系统实例)
中最后推荐系统页面的简单示例