JSP 渲染简单示例

本文代码转载自
《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 推荐系统实例)
中最后推荐系统页面的简单示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值