JSP

网页应用程序开发

JSP实验04 内置对象的使用

实验目的:掌握JSP对象对象的使用方法

1 request对象

运用request对象通过JSP页面和Tag文件实现四则运算

创建输入页面inputNumber.jsp,添加表单,在表单中添加文本域numberOne(宽度为6),选择框operator(列表值为+、-、*、/),文本域numberTwo(宽度为6)以及提交按钮,设置表单动作为receiveNumber.jsp:


创建获取用户提交信息页面receiveNumber.jsp,在页顶添加代码引入标记库:

 <%@ taglib tagdir="/WEB-INF/tags" prefix="computer" %>

在页面中添加代码,获取提交信息并作为参数传给自定义标记,输出运算结果:

<%  
String a = request.getParameter("numberOne");
String b = request.getParameter("numberTwo");
String operator = request.getParameter("operator");
if (a == null || b == null) {
    a = "";
    b = "";
}
if (a.length() > 0 && b.length() > 0) {
%>
<computer:Computer numberA="<%= a %>" numberB="<%= b %>" operator="<%= operator %>" />
<p>计算结果:<%= a %><%= operator %><%= b %>=<%= result %>
    <%  
}
%>
</p>
<p><a href="inputNumber.jsp">返回输入数据界面</a></p>

在/WEB-INF/tags下创建自定义标记Computer.tag,添加代码获取参数进行四则运算:

<%@ tag pageEncoding="utf-8" %>
<%@ attribute name="numberA" required="true" %>
<%@ attribute name="numberB" required="true" %>
<%@ attribute name="operator" required="true" %>
<%@ variable name-given="result" scope="AT_END" %>
<%
try {
    double a=Double.parseDouble(numberA);
    double b=Double.parseDouble(numberB);
    double r=0;
    if (operator.equals("+")) {
        r=a+b;
    } 
    else if (operator.equals("-")) {
        r=a-b;
    }
    else if(operator.equals("*")) {
        r=a*b;
    }
    else if(operator.equals("/")) {
        r=a/b;
    }
    jspContext.setAttribute("result",String.valueOf(r));
}
catch(Exception e) {
    jspContext.setAttribute("result","发生异常:"+e);
}
%>

完成后在浏览器中运行inputNumber.jsp,输入数值,选择运算符,点击提交按钮即进入显示运算结果页面:


2 response对象

运用response对象绘制半径为1~100像素的圆形

创建输入圆的半径页面inputRadius.jsp,添加表单,在表单中添加文本域radius(宽度为6)以及提交按钮,设置表单动作为drawCircle.jsp:

创建绘制圆形页面drawCircle.jsp,在页顶添加代码引入所需类包:

<%@ page import="java.awt.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.awt.image.*" %>
<%@ page import="java.awt.geom.*" %>
<%@ page import="com.sun.image.codec.jpeg.*" %>

在页面中添加代码根据获取的半径参数创建圆形并以JPEG格式输出到页面中:

<%  
String r = request.getParameter("radius");
try {
    double number = Double.parseDouble(r);
    if (number <=0 || number > 100) {
        //改变MIME类型
        response.setContentType("text/html;charset=utf-8");
        out.println(number + "作为圆的半径不合理或超出绘制范围(1-100)。");
    }
    else if (number > 0 && number <= 100) {
        response.setContentType("image/jpeg");
        int width = 100, height = 100;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, width, height);
        Graphics2D g_2d = (Graphics2D)g;
        Ellipse2D circle = new Ellipse2D.Double(0, 0, number, number);
        g_2d.setColor(Color.blue);
        g_2d.fill(circle);
        g.dispose();
        //获取指向用户端的输出流
        OutputStream outClient = response.getOutputStream();
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outClient);
        encoder.encode(image);
    }
}
catch (Exception e) {
    response.sendRedirect("inputRadius.jsp");
}
%>

完成后在浏览器中运行inputRadius.jsp,输入半径点击提交按钮即进入显示图形页面:

3 session对象

运用session对象存储用户数据模拟网店的购物车功能

创建选择图书页面choiceBook.jsp,以在链接中附带参数的方式提交所选图书信息:

<h3>选择要购买的图书</h3>
<p>
<a href="orderForm.jsp?bookMess=Java面向对象程序设计@ISBN:9876@价格:34元">Java面向对象程序设计(34元)</a>
<br />
<a href="orderForm.jsp?bookMess=JSP程序设计@ISBN:4567@价格:29.5元">JSP程序设计(29.5元)</a>
<br /> 
<a href="orderForm.jsp?bookMess=XML程序设计@ISBN:2356@价格:29元">XML程序设计(29元)</a>
</p>


创建显示订单页面orderForm.jsp,在页顶添加代码,引入所需类包,根据用户提交的参数将用户选择的图书信息保存为会话对象:

<%@ page import="java.util.*" %>
<%  
String book = request.getParameter("bookMess");
byte b[] = book.getBytes("iso-8859-1");
book = new String(b, "utf-8");
if (book != null) {
    StringTokenizer fenxi = new StringTokenizer(book, "@");
    String bookName = fenxi.nextToken();
    String bookISBN = fenxi.nextToken();
    session.setAttribute(bookISBN, book);
}
%>

在页面中添加代码,以表格形式输出会话对象中保存的图书信息:

<h3>图书订单</h3>
<table border="1">
<%  
Enumeration keys = session.getAttributeNames();
while (keys.hasMoreElements()) {
    String key = (String)keys.nextElement();
    book = (String)session.getAttribute(key);
    if (book != null) {
        StringTokenizer fenxi = new StringTokenizer(book, "@");
%>
    <tr>
        <td><%= fenxi.nextToken() %></td>
        <td><%= fenxi.nextToken() %></td>
        <td><%= fenxi.nextToken() %></td>
    </tr>
<%  
    }
}
%>
</table>

完成后在浏览器中运行choiceBook.jsp,点击图书链接即可将其放入购物车:

评论:

发表评论:
该文章禁用评论功能。