JavaWeb编程技术(第3版)习题

JavaWeb编程技术(第3版)习题

一、自测试卷-选择题

1.下列( B )不是JSP技术的特征?
A.跨平台
B.分离静态内容和动态内容
C.解释执行
D.预编译

2.在JavaScript中,window对象的哪个方法不能弹出对话框?(  A  )
A.open()
B.alert()
C.confirm()
D.prompt()

3.下列哪行代码可以在页面上显示name的值?( B   )
A.<% =name%>
B.<%=name%>
C.<%!name%>
D.<% name%>

4.使用JavaBean时,当其被编译成Class文件后,需要放在项目中的( C )目录下,才可以在JSP页面中被调用。
A.项目根目录
B.WEB-INF\class
C.WEB-INF\classes
D.WEB-INF

5.当访问一个Servlet时,以下Servlet中的( D )个方法先被执行:
A.destroy() 
B.doGet()
C.service()
D.init()

6.在进行请求转发时,需要使用request对象的( A )方法把一些数据带设置在request范围内存取。
A.setAttribute()
B.getAttribute()
C.setParameter()
D.getParameter()

7.下列关于Servlet的描述错误的一项是( D  )。
A.Servlet是一种独立于平台和协议的服务器端的Java技术,可以用来生成动态的Web页面。
B.Servlet是使用Java Servlet应用程序设计接口(API)及相关类和方法的Java程序。
C.通常所说的Servlet就是指HttpServlet,用于处理Http请求。
D.Servlet是在JSP之后出现的运行在服务端的一种Java技术。

8.基于Java Mail的程序中,在创建Session对象前,需要先创建( B  )对象。
A. java.util.Session
B. java.util.Properties
C. java.util. Authenticator
D. java.util.Property

9.下列JDBC常用接口中,哪一个是执行存储过程的接口?( D  )
A.Connection
B.Statement
C.PreparedStatement
D.CallableStatement

10.XMLHttpRequest对象的status属性用于返回服务器的HTTP状态码,下列状态码和意义对应错误的是( B )。
A.0:未初始化
B.2:未加载
C.3:交互中
D.4:完成

11.下面哪个关键字不能用于指定类的访问权限?( D )
A.public
B.abstract
C.final
D.private

12.下列关于JSP指令描述不正确的一项是( D )?
A.可以指定在整个JSP页面范围内有效的属性。
B.可以放在JSP页面中的任意行。
C.必须放在JSP文件的开始部分。
D.Page指令中除import属性外,其他属性只能在指令中出现一次。

13.下列哪个不是response对象中用于重定向网页的方法?( B  )
A.sendRedirect(String location)
B.sendRedirect(String location,String msg)
C.sendError(int number)
D.sendError(int number,String msg)

14.下列不是response对象能实现的功能的是( C  )。
A.重定向网页。
B.缓冲区配置。
C.访问国际化信息。
D.设置HTTP响应报头。

15.在JSP中使用JavaBean组件,创建的JavaBean时,不需要遵循以下哪个规范?( A )
A.实现java.io.Serializable接口。
B.是一个公共类。
C.类中必须存在一个无参数的构造函数。
D.提供对应的setXxx()和getXxx()方法来存取类中的属性。

16.下列哪项不是Servlet与JSP的区别。( C )
A.编程方式不同。
B.Servlet必须在编译以后才能执行。
C.一次编写,到处运行。
D.运行速度不同。

17.关于JavaMail组件的MimeMessage类中常用的方法描述错误的是( D )。
A.setText()方法用于指定纯文本信息的邮件内容。
B.setContent()方法用于发送HTML等纯文本以外的信息。
C.setSubject()方法用于设置邮件的主题。
D.setRecipient()方法用于设置收件人地址。

18.想要执行下面这条SQL语句,应该使用( B )方法。
update tb_user set pwd=? where name=?
A.Statement对象的executeQuery()
B.Statement对象的executeUpdate()
C.PrepareStatement对象的executeQuery()
D.PrepareStatement对象的executeUpdate()

19.XMLHttpRequest对象的readyState属性用于获取请求的状态,下列属性值和意义对应错误的是( B )。
A.200:表示成功
B.202:错误的请求
C.404:文件未找到
D.500:内部服务器错误

20.下列哪个不是EL表达式的运算符( C )。
A.%
B.==
C.<>
D.!

21.在Eclipse 2020-12R开发工具的常用快捷键中,实现注释或取消注释的是( B )。
A.Alt+/
B.Ctrl + /
C.Ctrl + Shift + M
D.F3

22.下列哪个不是JSP包含的指令?( D )
A.page指令
B.include指令
C.taglib指令
D.forward指令

23.下列关于session对象描述错误的是( B )。
A.使用session对象,可以让服务器和客户端之间的连接一直保持下去。
B.在30min内,如果客户端不向服务器发出应答请求,session对象就会自动消失。
C.使用session对象的invalidate()方法,可以将会话中的全部内容删除。
D.在一个Servlet程序或JSP文件中,确保session会话终止的唯一方法使用超时设置。

24.下列哪个不是编写一个成功的JavaBean的宗旨?( C )
A.一次性编写
B.任何地方执行
C.降低代码复杂度
D.任何地方重用

25.若要创建一个Servlet,则应使创建的类继承HttpServlet类,同时导入一些,下列哪个包不是必须导入的。( D )
A.java.io包
B.javax.servlet包
C.javax.servlet.http包
D.java.util包

26.为了获得用户提交的表单数据,在Servlet中,需要通过( A )对象的提供的方法实现。
A.HttpServletRequest
B.HttpServletResponse
C.request
D.response

27.使用setRecipients()方法设置收件人地址时,提供了3个常量来区分收件人的类型。下列哪个不正确。( D )
A.Message.RecipientType.TO
B.Message.RecipientType.CC
C.Message.RecipientType.BCC
D.Message.RecipientType.TC

28.想要执行下面这条SQL语句,应该使用( C )方法。
select * from tb_user where name=?
A.Statement对象的executeQuery()
B.Statement对象的executeUpdate()
C.PrepareStatement对象的executeQuery()
D.PrepareStatement对象的executeUpdate()

9.下列关于jQuery描述错误的是( D )。
A.jQuery是一套简洁、快速、灵活的JavaScript脚本库。
B.引用jQuery的<script>标签,必须放在所有的自定义脚本文件的<script>之前。
C.在jQuery中,无论我们使用哪种类型的选择符都需要从一个"$"符号和一对"()"开始。
D.在一个页面中可以放置多个$(document).ready()方法和window.load()方法。

30.下列EL表达式语法相关的描述,错误的一项是( B )。
A.“${”符号是表达式起始点。
B.想要用EL表达式输出“${”符号只能在前面加上“\”符号。
C.在EL表达式中要输出一个字符串,可以将此字符串放在一对单引号或双引号内。
D.在页面的前面加入<%@ page isELIgnored="true" %>可以实现忽略EL表达式。

31.下列( A )不可以作为JSP程序的Web服务器。
A.IIS
B.BEA WebLogic
C.IBM WebSphere
D.Apache Tomcat

32.在JavaScript中,下面的哪个变量名是不正确的?( B )
A._17
B.7Name
C.i
D.return

33.下列( D )不是在JSP页面中可以应用的注释?
A.<!-- 注释内容-->
B.<%-- 注释内容 --%>
C./* 注释内容 */
D.<%  # 注释内容  %>

34.下列关于out对象用于管理响应缓冲区的方法描述错误的是( B )。
A.调用getBufferSize()方法,可以以字节为单位返回缓冲区的大小。
B.调用clear()方法和clearBuffer()方法都可以清除缓冲区的内容,使用哪个都可以。
C.调用flush()方法可以刷新缓冲区。
D.调用close()方法可以先刷新流,然后关闭流。

35.在JSP页面中通过调用值JavaBean来获取表单数据,通常不会用到下列哪个标识。( D )
A.<jsp:useBean>
B.<jsp:setProperty>
C.<jsp:getProperty>
D.<jsp:include>

36.在web.xml文件中配置Servlet时,可以指定Servlet的名称、Servlet的类的路径、描述信息、发布时显示的名称,其中,哪两项是必须指定的。( A )
A.Servlet的名称和Servlet的类的路径
B.描述信息和发布时显示的名称
C.Servlet的名称和描述信息
D.Servlet的类的路径和发布时显示的名称

37.JSP中使用( B )获得数据源?
A.Connection对象
B.JNDI
C.ResultSet对象
D.Statement对象

38.想要执行下面这条SQL语句,应该使用(  A  )方法。
select * from tb_user where name='mr'
A.Statement对象的executeQuery()
B.Statement对象的executeUpdate()
C.PrepareStatement对象的executeQuery()
D.PrepareStatement对象的executeUpdate()

39.在jQuery中,提供了多个用于发送请求的方法,下列哪个方法不能发送GET请求。( C )。
A.load()
B.get()
C.post()
D.$.ajax()

40.JSTL中的<c:param>标签,不能和下面哪个标签组合使用( B )。
A.<c:import>
B.<c:out>
C.<c:redirect>
D.<c:url>

41.Java语言编写的程序应被保存为后缀名为(  C  )的文件,然后编译成后缀名为(  B  )的字节码文件,最终通过执行该字节码文件执行Java程序。
A..jsp
B..class
C..java
D..servlet

42.Page指令中,( A )属于可以被多次使用?
A.import
B.contentType
C.extends
D.language

43.request对象的哪个方法可以获取客户端的IP地址。(  C  )
A.getRequestURI()
B.getRealPath()
C.getRemoteAddr()
D.getRemoteHost()

44.下列关于JavaBean技术描述错误的一项是( B   )。
A.JavaBean组件就是利用Java语言编写的组件。
B.JavaBean组件和企业级JavaBean(EJB)组件是相同的概念。
C.使用JavaBean的最大优点就在于它可以提高代码的重用性。
D.一个成功的JavaBean组件可以在任何平台上运行。

45.每一个过滤器对象都要直接或间接的实现Filter接口,在Filter接口中定义了三个方法,分别为init()方法、doFilter()方法与destroy()方法,这3个方法哪个是必须实现的。(  B  )
A.init()
B.doFilter()
C.destroy()
D.以上都不是

46.下列关于JFreeChart核心类描述错误的是( D )。
A.XXXDataset用来保存绘制图表的数据。
B.XXXRendere用于渲染和显示图表。
C.XXXAxis用来定义坐标轴的绘制属性。
D.XXXGenerator用于生成图表提示信息。

47.下列关于iText组件描述错误的是(  C  )。
A.	iText组件不仅可以生成PDF文件,也可以将XML、HTML文件转化为PDF文件。
B.	iText组件默认不支持中文,如果出现中文需要先下载对应的辅助包。
C.	如果图像需要旋转30°之后在文档中显示,可以通过方法setRotation(30)设定。
D.	在iText组件中没有行的概念,一个表格里面直接放单元格。

48.想要执行下面这条SQL语句,应该使用( B  )方法。
delete tb_user where name='mr'
A.Statement对象的executeQuery()
B.Statement对象的executeUpdate()
C.PrepareStatement对象的executeQuery()
D.PrepareStatement对象的executeUpdate()

49.下列关于JSON的描述错误的是(  D  )?
A.JSON是JavaScript Object Notation的简称,是一种轻量级的数据交换格式。
B.JSON没有变量或其他控制,只用于数据传输。
C.JSON使用{"属性1":属性值1,"属性2":属性值2……"属性n":属性值n}来定义对象。
D.JSON使用["属性1":属性值1,"属性2":属性值2……"属性n":属性值n]来定义数组。

50.关于JSTL表达式标签描述错误的一项是( D   )。
A.<c:out>标签用于将计算的结果输出到JSP页面中。
B.<c:set>标签用于定义和存储变量。
C.<c:remove>标签可以从指定的JSP范围中移除指定的变量。
D.<c:catch>标签用于显示异常信息。

二、自测试卷-填空题

自测试卷1

1、在进行JDK的配置时,需要在“环境变量”对话框中双击Path变量对其进行修改,在原变量值最前端添加("%JAVA_HOME%\bin;") 变量值

2、在JavaScript中分配事件处理程序时,事件处理程序名称必须(小写),才能(正确响应)事件

3、在<jsp:setProperty>标识中,property属性取值为(“*”)时,则request请求中所有参数的值将被赋给JavaBean中与参数具有相同名字的属性

4、创建一个过滤器对象需要实现(javax.servlet.Filter)接口,同时实现该接口的3个方法

5、假如存在以下代码:

<% int num=6;
request.setAttribute("no",num); %>

则下面的EL表达式分别打印什么结果?写在后面的横线上。
(1)${no<7}		     (true)
(2)${9-no}		      (3)
(3)${no div 0}		 (Infinity)
(4)${empty no}		 (false)
(5)${'7' > no}		 (true)
(6)${no=="6"}		 (true)

自测试卷2

1、在默认情况下,系统创建的JSP文件采用(ISO-8859-1)编码,不支持中文。为了让Eclipse创建的文件支持中文,可以在首选项中将JSP文件的默认编码设置为(UTF-8)或者(GBK)

2、在使用include指令时,如果file属性值以(“/”)开头,那么指定的是一个绝对路径,将在当前应用的根目录下查找文件;如果是以(文件名称或文件夹名)开头,那么指定的是一个相对路径,将在当前页面的目录下查找文件

3、(Cookie)是一小段文本信息,伴随着用户请求和页面在(Web服务器)和(浏览器)之间传递

4、在使用Ajax发送请求时,最好将(一个时间戳)追加到URL参数的后面,这样可以防止因浏览器缓存结果而不能实时得到最新的结果

5、如果想在JSP页面中输出EL表达式,可以使用(“\”)符号

自测试卷3

1、在Java中,(for)循环语句也称为计次循环语句,一般用于循环次数已知的情况。(while)循环语句也称为前测试循环语句。(do…while)循环语句也称为后测试循环语句

2、Page指令的contentType属性用于设置页面响应的MIME类型,通常被设置为(text/html) 

3、(include)指令包含文件的过程被称为静态包含;(<jsp:include>动作标识)包含文件的过程被称为动态包含

4、在JSP页面中,可以使用response对象中的(sendRedirect())方法将客户请求重定向到一个不同的页面

5、JDBC中提供了两种实现数据查询的方法,一种是通过(Statement)对象执行静态的SQL语句实现;另一种是通过(PreparedStatement)对象执行动态的SQL语句实现。推荐使用(PreparedStatement)对象

自测试卷4

1、MVC是一种程序设计概念,它同时适用于简单的和复杂的程序。使用该模式可将待开发的应用程序分解为3个独立的部分:(模型)、(视图)和(控制器)

2、在Java语言中,处理异常的语句有4种:(try…catch)语句、(finally)语句、(throw)语句及(throws)语句

3、在Page指令中,若buffer属性设为none,则(autoFlush)属性不能设为false

4、在JSP项目中,提交表单后,表单字段的值会被自动添加到请求中以参数进行传递,所以可通过request对象的(getParameter())方法来获取表单字段值

5、(MyBatis)框架是一个半自动映射的持久层框架

自测试卷5

1、面向对象的程序设计方法将客观事物抽象成为(“类”),并通过类的(“继承”)实现软件的可扩充性和可重用性

2、JSP指令通常以(“<%@”)标记开始,(以“%>”)标记结束

3、通过下面的代码可以实现(禁用缓存)功能
需要注意的是,上面的代码必须(在没有任何输出发送到客户端之前使用)

4、通过(setAttribute())方法将数据保存在session中,然后通过(removeAttribute())方法移除指定对象

5、(Commons-FileUpload)组件是Apache组织下的一个小项目,该组件可以方便地将(multipart/form-data)类型请求中的各种表单域解析出来,并实现一个或多个文件的上传

三、自测试卷-简答题

自测试卷1

1、什么是类?如何定义类?类的成员一般由哪两部分组成?这两部分的区别是什么?
答:
(1) 类是用来创建对象的模板,它包含被创建的对象的状态描述和方法的定义
(2)  在Java中定义类主要分为两部分:类的声明和类体,具体语法格式如下:
	[修饰符] class <类名> [extends 父类名] [implements 接口列表]{
  		定义成员变量
  		定义成员方法
	}
(3)类的成员一般由成员变量和成员方法组成,其中,成员变量表示类的状态和属性;成员方法表示类的行为,由方法的声明和方法体两部分组成

2、简述数据库连接池的优缺点
答:
连接池具有下列优点:
(1)创建一个新的数据库连接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,而且这个过程通常是一个很耗时的过程,而采用数据库连接池后,数据库连接请求则可以直接通过连接池满足,而不需要为该请求重新连接、认证到数据库服务器,从而节省了时间;
(2)提高了数据库连接的重复使用率;
(3)解决了数据库对连接数量的限制。

连接池具有下列缺点:
(1)连接池中可能存在多个与数据库保持连接但未被使用的连接,在一定程度上浪费了资源;
(2)要求开发人员和使用者准确估算系统需要提供的最大数据库连接的数量。


自测试卷2

1、EL表达式的基本语法是什么?如何让JSP页面忽略EL表达式?
答:
表达式语法格式如下:

${expression}

在上面的语法中,“${”符号是表达式起始点,因此,如果在JSP网页中要显示“${”字符串,必须在前面加上“\”符号,即“\${”,或者写成“${'${'}”,也就是用表达式来输出“${”符号。在表达式中要输出一个字符串,可以将此字符串放在一对单引号或双引号内。

在页面的前面加入以下语句声明忽略EL表达式:

<%@ page isELIgnored="true" %>


2、在JSP中一个标准的JavaBean需要具备哪些条件?
答:
一个标准的JavaBean需遵循以下规范:
(1)实现java.io.Serializable接口;
(2)是一个公共类;
(3)类中必须存在一个无参数的构造函数;
(4)提供对应的setXxx()和getXxx()方法来存取类中的属性,方法中的“Xxx”为属性名称,属性的第一个字母应大写。若属性为布尔类型,则可使用isXxx()方法代替getXxx()方法


自测试卷3

1、简述JDBC连接数据库的基本步骤。
答:
在JSP中连接数据库大致可以分加载JDBC驱动程序、创建Connection对象的实例、执行SQL语句、获得查询结果和关闭连接等5个步骤

2、XMLHttpRequest对象提供了哪两个属性,用来访问服务器响应?返回的结果都是什么?
答:
一个是responseText属性,返回字符串响应,另一个是responseXML属性,返回XML响应


自测试卷4

1、简述<jsp:include>动作标识与include指令的区别。
答:
include指令通过file属性来指定被包含的页面,include指令将file属性值看作一个实际存在的文件的路径,所以该属性不支持任何表达式。若在file属性值中应用JSP表达式,则会抛出异常。<jsp:include>动作标识通过page属性来指定被包含的页面,该属性支持JSP表达式。

2、简述jSPSmartUpload、Java Mail、JFreeChart和iText组件的作用
答:
jSPSmartUpload可以方便地将multipart/form-data类型请求中的各种表单域解析出来,并实现一个或多个文件的上传,同时也可以限制上传文件的大小等内容。
Java Mail用来处理E-mail的API,是一种可选的、用于读取、编写和发送电子消息的包(标准扩展)。


自测试卷5


1、当表单提交信息中包括汉字时,在获取时应该做怎样的处理?
答:
在page指令下方通过“request.setCharacterEncoding("gb2312");”语句设置编码格式。

2、JDBC中提供的两种实现数据查询的方法分别是什么?哪种方法是被推荐使用的,为什么?
答:
JDBC中提供了两种实现数据查询的方法,一种是通过Statement对象执行静态的SQL语句实现;另一种是通过PreparedStatement对象执行动态的SQL语句实现。由于PreparedStatement类是Statement类的扩展,一个PreparedStatement对象包含一个预编译的SQL语句,该SQL语句可能包含一个或多个参数,这样应用程序可以动态地为其赋值,所以PreparedStatement对象执行的速度比Statement对象快。因此在执行较多的SQL语句时,建议使用PreparedStatement对象

四、编程题

1、exam1编程要求1

exam1编程要求 1:实现以下页面效果,能产生随机1位数的相加算式,点击看不清换一张能重新产生算式,在验证码框中插入正确得数,网页能跳转至广西外国语学院首页

完整代码:https://gitee.com/boring-hero/java-web.git

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        body {
            margin: 0;
            padding: 0;
        }

        a {
            text-decoration: none;
            color: #fff;
        }
        .Box{
            margin: 100px auto 0;
            text-align: center;
        }
        .box {
            width: 300px;
            color: #fff;
            background-color: rgba(0, 0, 0, 0.5);
            margin: auto;
            text-align: center;
        }

        .boxCode {
            width: 300px;
            background-color: rgba(0, 0, 0, 0.5);
            margin: auto;
        }

        .code {
            color: red;
            font-size: 30px;
        }
    </style>
</head>
<body>
    <div class="Box">
        <div class="boxCode">
            <span class="code" id="code"></span>
            <a href="" id="linkbt">看不清换一张</a>
        </div>
        <div class="box">
            <label for="inputCode">验证码:</label>
            <input type="text" id="inputCode">
            <input type="button" id="Button1" value="确定">
        </div>
    </div>
    <script type="text/javascript">
        'user strict';
        function getCode(){
            var arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
            var str = '';
            for (let i = 0; i < 6; ++i) {
                //取0到15
                let num = Math.round(Math.random() * (15 - 0) + 0);//得到0-15的一个随机数
                str += arr[num];//拼接字符串
            }
            return str;
        }
        window.onload=function(){
            let res=getCode();
            document.getElementById("code").innerText=res;
            document.getElementById("linkbt").onclick=function(){
                document.getElementById("code").innerText=res;
            }
            document.getElementById('Button1').onclick=function(){
                let code=document.getElementById('code').innerText;
                let inputCode=document.getElementById('inputCode').value;
                if(code!=inputCode){
                    alert('输入错误!');
                    document.getElementById('inputCode').value='';
                    return false;
                }else{
                    location.href='https://blog.csdn.net/pipihan21';
                }
            }
        }
    </script>
</body>
</html>
2、exam2编程要求

exam2编程要求:网站的第一个页面和第二个页面如图所示,将第一个页面输入的信息传入第二个页面当中,第二个页面以表格形式显示用户输入信息及隐含信息

完整代码:https://gitee.com/boring-hero/java-web.git

代码 :

prarmtest1.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Paramtest1</title>
</head>
<body>
<form action="" method="post" name="Form"> <!--提交给本页处理-->
    姓名<input name="UserName" type="text" /> <br/>
    学号<input name="Number" type="text" /> <br/>
    <input type="hidden" name="School" value="南宁师范大学">
    <input type="hidden" name="Major" value="计算机科学">
    <input type="submit" value="登录" />
</form>

<%
    //当单击“登录”按钮时,调用Form.submit()方法提交表单至本文件,
    //用户名和密码均不为空时,跳转到 jsp_action_forword_b.jsp,并且把用户名和密码以参数形式传递
    String s1 = request.getParameter("UserName");
    String s2 = request.getParameter("Number");
    String s3 = request.getParameter("School");
    String s4 = request.getParameter("Major");
    if(s1 != null && s2 != null && !"".equals(s1) && !"".equals(s2)) {
%>
<jsp:forward page="parametest2.jsp" >
    <jsp:param name="school" value="<%=s3%>"  />
    <jsp:param name="major" value="<%=s4%>"  />
    <jsp:param name="name" value="<%=s1%>" />
    <jsp:param name="number" value="<%=s2%>" />
</jsp:forward >
<%
    }
%>
</body>
</html>

parametest2.jsp文件

<%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>表格</title>
</head>
<body>

<%
    String strSchool = request.getParameter("school");
    String strMajor = request.getParameter("major");
    String strName = request.getParameter("name");
    String strNumber = request.getParameter("number");
    if (!"".equals(strName) && null != strName
            && !"".equals(strNumber) && null != strNumber) {
%>
<table border="1">
    <tr>
        <td>学校</td>
        <td>专业</td>
        <td>姓名</td>
        <td>学号</td>
    </tr>
    <tr>
        <td><%= strSchool %></td>
        <td><%= strMajor %>
        </td>
        <td><%= strName %>
        </td>
        <td><%= strNumber %>
        </td>
    </tr>
</table>
<%
    } else {
        out.println("信息错误");
    }
%>


</body>
</html>
3、exam3编程要求

exam3编程要求:网站效果如下图,通过bean保存商品,将商品列表从index_exam中传到show_exam页面并进行展示

完整代码:https://gitee.com/boring-hero/java-web.git

代码:

MyTools.java文件

package com.lx.toolbean;

import java.io.UnsupportedEncodingException;

public class MyTools {
    public static int strToint(String str){
        if(str==null||str.equals(""))
            str="0";
        int i=0;
        try{
            i=Integer.parseInt(str);
        }catch(NumberFormatException e){
            i=0;
            e.printStackTrace();
        }
        return i;
    }
    public static String toChinese(String str){
        if(str==null)
            str="";
        try {
            str=new String(str.getBytes("ISO-8859-1"),"utf-8");
        } catch (UnsupportedEncodingException e) {
            str="";
            e.printStackTrace();
        }
        return str;
    }
}

ShopCar.java

package com.lx.toolbean;

import com.lx.valuebean.GoodsSingle;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

public class ShopCar {
    private ArrayList buylist=new ArrayList();
    public ArrayList getBuylist() {
        return buylist;
    }

    public void addItem(GoodsSingle single){
        if(single!=null){
            if(buylist.size()==0){
                GoodsSingle temp=new GoodsSingle();
                temp.setName(single.getName());
                temp.setPrice(single.getPrice());
                temp.setNum(single.getNum());
                buylist.add(temp);
            }
            else{
                int i=0;
                for(;i<buylist.size();i++){
                    GoodsSingle temp=(GoodsSingle)buylist.get(i);
                    if(temp.getName().equals(single.getName())){
                        temp.setNum(temp.getNum()+1);
                        break;
                    }
                }
                if(i>=buylist.size()){
                    GoodsSingle temp=new GoodsSingle();
                    temp.setName(single.getName());
                    temp.setPrice(single.getPrice());
                    temp.setNum(single.getNum());
                    buylist.add(temp);
                }
            }
        }
    }

    public void removeItem(String name) throws UnsupportedEncodingException {
        for(int i=0;i<buylist.size();i++){
            GoodsSingle temp=(GoodsSingle)buylist.get(i);
            if(temp.getName().equals(java.net.URLDecoder.decode(name,"gb2312"))){
                if(temp.getNum()>1){
                    temp.setNum(temp.getNum()-1);
                    break;
                }
                else if(temp.getNum()==1){
                    buylist.remove(i);
                }
            }
        }
    }

    public void clearCar(){
        buylist.clear();
    }
}

GoodsSingle.java

package com.lx.valuebean;

public class GoodsSingle {
    private String name;
    private float price;
    private int num;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }
}

docar.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.lx.valuebean.GoodsSingle" %>
<%@ page import="com.lx.toolbean.MyTools" %>
<jsp:useBean id="myCar" class="com.lx.toolbean.ShopCar" scope="session"/>
<%
	String action=request.getParameter("action");
	if(action==null)
		action="";	
	if(action.equals("buy")){
ArrayList goodslist=(ArrayList)session.getAttribute("goodslist");	
int id=MyTools.strToint(request.getParameter("id"));		
		GoodsSingle single=(GoodsSingle)goodslist.get(id);
		myCar.addItem(single);
		response.sendRedirect("show.jsp");		
	}
	else if(action.equals("remove")){
		String name=request.getParameter("name");
		myCar.removeItem(name);
		response.sendRedirect("shopcar.jsp");		
	}
	else if(action.equals("clear")){
		myCar.clearCar();
		response.sendRedirect("shopcar.jsp");
	}
	else{
		response.sendRedirect("show.jsp");		
	}	
%>

index.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.lx.valuebean.GoodsSingle" %>
<%!
	static ArrayList goodslist=new ArrayList();			//用来存储商品
	static{												//静态代码块
		String[] names={"苹果","香蕉","梨","橘子"};		//商品名称
		float[] prices={2.8f,3.1f,2.5f,2.3f};			//商品价格
		for(int i=0;i<4;i++){							//初始化商品信息列表
			//定义一个GoodsSingle类对象来封装商品信息
			GoodsSingle single=new GoodsSingle();
			single.setName(names[i]); 					//封装商品名称信息
			single.setPrice(prices[i]); 				//封装商品价格信息
			single.setNum(1); 							//封装购买数量信息
			goodslist.add(i,single); 					//保存商品到goodslist集合对象中
		}
	}
%>
<%
	session.setAttribute("goodslist",goodslist); 		//保存商品列表到session中
	response.sendRedirect("show.jsp");					//跳转到show.jsp页面显示商品
%>

shopcar.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.lx.valuebean.GoodsSingle" %>
<!-- 通过动作标识,获取ShopCar类实例 -->
<jsp:useBean id="myCar" class="com.lx.toolbean.ShopCar" scope="session"/>
<% 
	ArrayList buylist=myCar.getBuylist();
	float total=0;
%>

<table border="1" width="450" rules="none" cellspacing="0" cellpadding="0">
	<tr height="50"><td colspan="5" align="center">购买的商品如下</td></tr>
	<tr align="center" height="30" bgcolor="lightgrey">
		<td width="25%">名称</td>
		<td>价格(元/斤)</td>
		<td>数量</td>
		<td>总价(元)</td>
		<td>移除(-1/次)</td>
	</tr>
	<%	if(buylist==null||buylist.size()==0){ %>
	<tr height="100"><td colspan="5" align="center">您的购物车为空!</td></tr>
	<% 
		}
		else{
			for(int i=0;i<buylist.size();i++){
				GoodsSingle single=(GoodsSingle)buylist.get(i);
				String name=single.getName();
				float price=single.getPrice();
				int num=single.getNum();
				float money=((int)((price*num+0.05f)*10))/10f;
				total+=money;
	%>
	<tr align="center" height="50">
		<td><%=name%></td>
		<td><%=price%></td>
		<td><%=num%></td>
		<td><%=money%></td>
		<td>
<a href="docar.jsp?action=remove&name=<%=java.net.URLEncoder.encode(single.getName(),"gb2312")%>">移除</a>
</td>
	</tr>
	<%							
			}
		}
	%>
	<tr height="50" align="center"><td colspan="5">应付金额:<%=total%></td></tr>
	<tr height="50" align="center">
		<td colspan="2"><a href="show.jsp">继续购物</a></td>
		<td colspan="3"><a href="docar.jsp?action=clear">清空购物车</a></td>
	</tr>				
</table>

show.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.lx.valuebean.GoodsSingle" %>
<%	ArrayList goodslist=(ArrayList)session.getAttribute("goodslist");	%>
<table border="1" width="450" rules="none" cellspacing="0" cellpadding="0">
	<tr height="50"><td colspan="3" align="center">提供商品如下</td></tr>
	<tr align="center" height="30" bgcolor="lightgrey">
		<td>名称</td>
	<td>价格(元/斤)</td>
		<td>购买</td>
	</tr>
	<%  if(goodslist==null||goodslist.size()==0){ %>
	<tr height="100"><td colspan="3" align="center">没有商品可显示!</td></tr>
	<% 
		} 
		else{
			for(int i=0;i<goodslist.size();i++){
				GoodsSingle single=(GoodsSingle)goodslist.get(i);
	%>
	<tr height="50" align="center">
		<td><%=single.getName()%></td>
		<td><%=single.getPrice()%></td>
		<td><a href="docar.jsp?action=buy&id=<%=i%>">购买</a></td>
	</tr>
	<%
			}
		}
	%>
	<tr height="50">
<td align="center" colspan="3"><a href="shopcar.jsp">查看购物车</a></td>
</tr>
</table>

先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
  2. 答:URL称为统一资源定位符, URL通常由4部分组成:协议名称、页面所在主机的DNS名、可选的端口号和资源的名称。URI称为统一资源标识符,是以特定语法标识一个资源的字符串。URI由模式和模式特有的部分组成,它们之间用冒号隔开,一般格式如下:    schema:schema-specific-part    URI是URL和URN的超集。   3. 答:①是URL,①和②都是URI,③是URN    4. 答:动态Web文档技术包括服务器端动态文档技术和客户端动态文档技术,前者包括CGI技术、服务器扩展技术和HTML页面中嵌入脚本技术。其中HTML页面中嵌入脚本技术包括ASP、PHP和JSP技术。    最流行的客户端动态文档技术是在HTML页面中嵌入JavaScript脚本代码。使用JavaScript可以设计交互式页面。与服务器端动态文档不同,JavaScript脚本是在客户端执行的。   5. 答:Servlet是用Servlet API开发的Java程序,它运行在Servlet容器中。Servlet容器是运行Servlet的软件,主要用来扩展Web服务器的功能。   6. 答:开发Servlet的一般步骤包括:(1)编写Servlet源程序;(2)编译;(3)将Servlet部署到Servlet容器中;(4)访问执行Servlet。    7. 答:\lib\servlet-api.jar文件。    8. 答:部署描述文件名是web.xml,它是XML文件,应该存放在Web应用程序的\WEB-INF目录中。 9. 答:当服务器找不到用户请求的资源时将发生404错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值