网络应用程序设计(idea版)——实验三:Web组件重用与JavaBeans

news2025/2/28 17:43:42

目录

实验预习报告

一、实验目的

二、实验原理

三、实验预习内容

实验报告

一、实验目的

二、实验要求

三、实验内容及要求


实验预习报告

一、实验目的

1. 理解静态包含和动态包含的概念,掌握相关指令和动作的使用;

2. 掌握JavaBeans的含义和创建方法;

3. 重点掌握在JSP页面中使用JavaBeans的标准动作。

二、实验原理

通过重用Web组件可以提高应用程序开发的效率和其可维护性。在JSP中可以通过包含机制和JavaBean实现Web组件的重用。

包含分为静态包含和动态包含。静态包含通过include指令实现,动态包含通过标准动作<jsp:include>实现。

在JSP页面中使用JavaBean是最重要的组件重用技术,这主要是通过下面3个标准动作实现的:

<jsp:useBean>

<jsp:setProperty>

<jsp:getProperty>

三、实验预习内容

1. 静态include指令何时执行?主页面和被包含的子页面是否转换为一个转换单元?

同一个转换单元的页面之间如何共享数据?

静态包含是在JSP页面转换阶段将另一个文件的内容包含到当前JSP页面中。静态include指令与主页面同时执行;主页面和被包含的子页面是转换为一个转换单元;同一个转换单元的页面之间通过request作用于共享。

        2. <jsp:include>动作指令何时执行?主页面和被包含的子页面是否转换为一个转换单元?动作包含的子页面与主页面共享同一个请求吗?在不同的转换单元中如何进行数据的传递和共享?

jsp:include动作指令与main.jsp页面分别编译执行;主页面和被包含的子页面是转换为一个转换单元;动作包含的子页面与主页面共享同一个请求。

3. <jsp:forward>动作与<jsp:include>动作有什么相同点和不同点?与<jsp:forward>动作等价的其他两种写法如何表示?

转发到的页面处理完后并不将控制转回主页面。

<% RequestDispatcher view=request.getRequestDispatcher(? other.jsp? ) ;

View.forward(request,response) ;%>

< % pageContext.forward(? other.jsp? ) ;%>

4. 什么是JavaBean?

JavaBeans是Java平台的组件技术,在Java Web开发中常用JavaBeans来存放数据、封装业务逻辑等,从而很好地实现业务逻辑和表示逻辑的分离,使系统具有更好的健壮性和灵活性。

5. 访问JavaBean的三个JSP动作中<jsp:useBean>动作的常用属性有哪些?这些属性各有什么作用?

useBean动作的常用属性有:id属性:用来唯一标识一个bean实例。scope属性:指定bean实例的作用域。class属性:指定创建bean实例的java类。type属性:指定由id属性声明的变量的类型。session属性: 你可以在同一次会话的任意一个页面使用该JavaBean对象,该JavaBean对象在整个会话期间一直存在。使用jsp:useBean/创建JavaBean对象的页面的<%@page %>指令元素的session属性值必须设置为true。

实验报告

一、实验目的

1. 理解静态包含和动态包含的概念,掌握相关指令和动作的使用;

2. 掌握JavaBeans的含义和创建方法;

3. 重点掌握在JSP页面中使用JavaBeans的标准动作。

二、实验要求

1. 实验前进行预习,完成实验预习报告;

2.按照每一项实验内容进行上机实践与编程,将程序源代码和运行结果图附在实验报告中实验内容对应的部分。

3. 实验预习报告和实验报告打印装订在一起。

4. 将每一次实验的源代码按目录组织保存并压缩,按照老师指定的要求进行提交。代码保存方式如:exp03表示实验三Web项目的名称,其下保存各项实验内容的源文件及相关资源,将整个exp03文件夹进行压缩后命名为班级-姓名-实验03,如:计171-张三-实验03。

三、实验内容及要求

1. include静态指令的使用。

创建名称为exp03的Web项目,编写hello.jsp页面,其中声明一个变量userName,用于获取请求地址后查询串参数userName的值;使用<%@ include>静态指令包含response.jsp页面,通过response.jsp页面显示userName的值,用下面两种方法实现。执行代码并查看运行结果。

方法一:response.jsp页面中通过JSP表达式直接输出变量userName的值。

方法二:通过pageContext作用域属性,在主页面和子页面间共享userName的值,降低主页面和子页面的依赖性。

hello.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello</title>
</head>
<body>
<%! String username;%>
<%@ include file="response.jsp"%>
</body>
</html>

response.jsp: 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>response</title>
</head>
<body>
<%--<% username=request.getParameter("username");%>--%>
<%--Hello,<%=username%><br/>--%>
<% pageContext.setAttribute("username",request.getParameter("username"),PageContext.REQUEST_SCOPE);%>
<%= pageContext.getAttribute("username",PageContext.REQUEST_SCOPE)%>
</body>
</html>

2. <jsp:include>动作指令的使用。

编写main.jsp页面,其中声明一个变量userName,用于获取请求地址后查询串参数userName的值;在main.jsp页面中使用<jsp:include>动作包含subpage.jsp页面,通过subpage.jsp页面显示userName的值;执行代码并查看运行结果。

main.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>main</title>
</head>
<body>
<%! String username;%>
<jsp:include page="subpage.jsp"></jsp:include>
</body>
</html>

subpage.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>subpage</title>
</head>
<body>
<% String username=(String)request.getParameter("username");%>
<%= username %>
</body>
</html>

3. <jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>动作的使用

从HTML页面login.html中输入用户名和口令等,然后提交给display. jsp页面,在该页面中通过JavaBeans保存数据并输出。

【步骤1】创建UserBean.java,包含username, password, email三个私有数据成员和相应的访问器和设置器。

UserBean.java:

package com.example;

public class UserBean {
    private String username;
    private String password;
    private String email;
    public UserBean(){
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public UserBean(String username,String password,String email){
        this.username=username;
        this.password=password;
        this.email=email;
    }
}

【步骤2】编写登录页面login.html,部分代码如下,补充关键代码:

<html>

<body>

Please input:<br>

<form action= "display.jsp" method="post">

UserName:<input type="text" name="username"><br>

Password:<input type="password" name="password"><br>

Email:<input type="text"name="email"><br>

<input type="submit" value="提交">

</form>

</body>

</html>

login.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <title>login</title>
</head>
<body>
Please input:<br>
<form action="display.jsp" method="post">
    UserName:<input type="text" name="username"><br>
    Password:<input type="password" name="password"><br>
    Email:<input type="text"name="email"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

【步骤3】编写display.jsp页面,使用JavaBeans显示输入的信息,部分代码如下,补充关键代码:

<%@ page import="com.beans.UserBean" %>

    <jsp:useBean id="user" class= "UserBean">         

    <jsp:setProperty name="user" property="*"/>       

</jsp:useBean>     

<html>

<body>

   UserName:<jsp:getPropertyname="user"property="username"/><br>

   Password: <jsp:getProperty name="name" property="password"/> <br>

   Email: <jsp:getProperty name="user" property="email"/>  <br>

</body>

</html>

display.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.example.UserBean" %>
<jsp:useBean id="user" class="com.example.UserBean">
    <jsp:setProperty name="user" property="*"/>
</jsp:useBean>
<html>
<head>
    <title>display</title>
</head>
<body>
    UserName:<jsp:getProperty name="user" property="username"/><br>
    Password:<jsp:getProperty name="user" property="password"/><br>
    Email:<jsp:getProperty name="user" property="email"/><br>
</body>
</html>

4. 使用JavaBean构造一个简单的计算器,能够进行“+、—、*、/”运算。

【步骤1】编写实现简单计算器的JavaBean:SimpleCalculator.java,包含first、second、operator、result四个成员变量和相应的访问器与设置器,一个calculator方法根据运算符获取运算结果。

SimpleCalculator:

package com.example;

public class SimpleCalculator {

    private float first;
    private float second;
    private String  operator;
    private float result;

    public SimpleCalculator() {}

    public float getFirst() {
        return first;
    }

    public void setFirst(float first) {
        this.first = first;
    }

    public float getSecond() {
        return second;
    }

    public void setSecond(float second) {
        this.second = second;
    }

    public String getOperator() {
        return operator;
    }

    public void setOperator(String operator) {
        this.operator = operator;
    }
    public float calculate(float first,float second,String operator)
    {
        switch(operator)
        {
            case "+": result=first+second;break;
            case "-": result=first-second;break;
            case "*": result=first*second;break;
            case "/": result=first/second;break;
            default: ;break;
        }
        return result;
    }
}

【步骤2】编写calculate.jsp页面,用户通过表单输入两个操作数和运算符,调用该页面自身处理该表单,通过调用SimpleCalculator类的实例实现运算逻辑,并显示运算结果。

calculate.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<jsp:useBean id="calculator" class="com.example.SimpleCalculator">
    <jsp:setProperty name="calculator" property="*"/>
</jsp:useBean>
<!DOCTYPE html >
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>calculate</title>

</head>
<body>
<%
    try
    {
        float first=calculator.getFirst();
        float second=calculator.getSecond();
        String  op=calculator.getOperator();
        out.print("计算结果为:"+calculator.getFirst()+calculator.getOperator()+calculator.getSecond()+"="
                +calculator.calculate(first, second, op));
    }catch(Exception e)
    {
        e.printStackTrace();
    }

%>
<br/>
<form action="calculate.jsp" method="post">
    第一个操作数:<input type="text" name="first">
    <select name="operator">
        <option value="+">+</option>
        <option value="-">-</option>
        <option value="*">*</option>
        <option value="/">/</option>
    </select>
    第二个操作数:<input type="text" name="second"><br/>
    <input type="submit" value="计算" >
</form>
</body>
</html>

四、思考题

1. 什么是Model 1体系结构,有何缺点?

答:model1体系每个请求的目标都是jsp页面。Jsp页面负责完成所有任务并将响应发送给客户。缺点:①特需要将大量的Java代码的业务逻辑嵌入到jsp页面中;②不能提高组件的可重用性。

2. 什么是MVC设计模式?其优点是什么?

答:将web应用组件分成模型、控制器、视图三部分,每种组件完成各自的任务,该结构的所有请求目标都是servlet,充当控制器,servlet分析请求并将所需要的数据收集到JavaBean对象,该对象作为模型,最后servlet将请求转发到jsp,有jsp调用JavaBean中的数据并产生响应。

3. 实现MVC设计模式的一般步骤是什么?

答:(1)定义JavaBeans存储数据;

(2)使用Servlet处理请求;

(3)结果与存储;

(4)转发请求到JSP页面;

(5)从JavaBeans对象中提取数据。

如有建议或想法,欢迎一起讨论学习~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

路科验证UVM入门与进阶详解实验3

在UVM——lab3中&#xff0c;将SV环境移植到UVM的重点内容如下&#xff1a; TLM的单向、多向通信端口使用TLM的通信管道UVM的回调类型 uvm_callbackUVM的一些仿真控制函数TLM单向、多向通信 1、何为事务级、何为事务级通信&#xff08;TLM&#xff09;&#xff1f;有什么用&am…

禁用linux系统默认的22端口号

前提条件&#xff1a;在云平台上开放一个代替22的端口。 1、需查看服务器的防火墙是否开启&#xff0c; 命令&#xff1a;systemctl status firewalld.service 如果防火墙的状态为开启&#xff0c;在运行&#xff0c;需要先在防火墙增加端口 1.命令&#xff1a;firewall-cm…

【消息队列】Kafka如何实现高性能IO

我们直到Kafka是一个自称高性能的消息队列引擎&#xff0c;一般来说对于中间件的设计需要从计算、存储、网络三方面进行下手&#xff0c;而消息从产生到消费&#xff0c;也会经历多个流程&#xff0c;比如在生产者端采用异步\同步方式发送&#xff0c;采用高效的压缩算法&#…

JavaWeb03 Cookie和Session

一个网站怎么证明你来过&#xff1f; 1.首次访问时服务器给客户端一个cookie&#xff0c;下次客户端再次访问会自动携带cookie&#xff0c;注意cookie可以是多个 2.首次访问时服务器登记了客户端一系列信息&#xff0c;下次客户端再进行访问时服务器自动匹配此客户端是否访问…

Win10搭建我的世界Minecraft服务器「内网穿透远程联机」

文章目录1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址9. 使用固定公网地址远程联机转载…

Mac远程控制工具有哪些

适用于Mac的远程控制工具有很多&#xff0c;这里我们给大家列举五个常用软件。 1、Apple Remote Desktop 苹果自带远程桌面正如其名称所承诺的那样。作为 Apple 出品的应用程序&#xff0c;您可以想象它的配置和上手是多么容易。从 App Store 下载 Apple Remote Desktop 后&a…

ThreadPoolExecutor获取原始异常

ThreadPoolExecutor作用 ThreadPoolTaskExecutor是Spring框架提供的一个线程池实现&#xff0c;它是基于Java的ThreadPoolExecutor实现的。ThreadPoolTaskExecutor可以管理线程池中的线程&#xff0c;以满足多线程并发执行任务的需要。 FutureTask作用 FutureTask的主要作用…

自动化篇 | 13 | app自动化:airtest

1 airtes简介 1.1 参考地址 http://airtest.netease.com/ # airtest官网 https://airtest.doc.io.netease.com/ # airtest操作方法 https://airtest.doc.io.netease.com/IDEdocs/faq/1_code_examples/ # 代码示例2 airtest架构 Airtest框架 3 airtest使用 3.1 打开界…

【C语言】猜数字游戏的实现

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1.思路&#xff08;代码会附在最后面&#xff09; 2.随机数函数rand 1.思路&#xff08;代码会附在最后面&#xff09; 首先实现一个猜数字游戏我们先要有一个思路&#xff1a;1.产生一个随机数 2.猜数字 3.可能猜大了 4.可能…

java简单一写一个springboot入门案例

首先 我们先打开idea编辑器 然后 选择File New>Project… 项目的话 我们选择 Spring lnitializr 右边的路径要改一下 然后 选择好路径之后 一定要要在后面加上 \项目名 例如 我这里 选择了 D盘下的学习案例下的springbootDom 项目名叫 threshold 那就这样配置 java版本选…

探索【PhySO】

目录0、 初步报错情况1、230、 初步报错情况 根据原链接&#xff0c;已确定安装成功&#xff0c;运行demo时出现报错&#xff0c;不能正常运行 报错&#xff1a; .Dummy epoch time 238.366736 ms .Dummy epoch time (w duplicate elimination) 180.852427 ms (found 15/1…

【结构型模式】代理模式

文章目录优秀借鉴1、简介2、结构3、实现方式3.1、案例引入3.2、静态代理3.3、JDK动态代理3.4、CGLIB动态代理4、区别对比4.1、静态代理和动态代理4.2、JDK动态代理和CGLIB动态代理5、代理模式优缺点6、应用场景优秀借鉴 设计模式&#xff08;四&#xff09;——搞懂什么是代理…

线段树的懒标记

上次看的那个视频讲线段树的时候压根没讲懒标记&#xff0c;然后我今天去写题目直接被薄纱&#xff01;都是70分&#xff0c;剩下3个节点tml&#xff01;&#xff01;&#xff01; 懒标记 我们在修改一些区间的时候&#xff0c;按照我昨天来学的来修改要改到最下面的叶节点去…

Visual Studio如何将UTF-8字符串输出到控制台

解决c语言使用libcurl库时控制台输出中文出现乱码的问题。 字符编码问题一直以来都是Windows系统的诟病&#xff0c;而Visual Studio也是饱受此诟病。由于历史原因&#xff0c;Windows系统对各个不同的国家地区可能采用不同的code page。由于早先Unicode并未发展成熟&#xff0…

Java设计模式之工厂模式

什么是工厂模式 工厂模式就是将创建对象的具体过程和使用过程分开&#xff0c;这样能够使代码更加灵活。 工厂模式主要分为三类&#xff1a; 简单工厂模式工厂方法模式抽象工厂模式 比如在没有工厂的时候&#xff0c;用户需要一台奥迪车&#xff0c;那么就需要用户去创建一台…

【java 多线程】并发设计模式-两阶段终止模式(对interrupt的理解)

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

惊艳!阿里出品“Java全栈进阶宝典”,广度与深度齐头并进

前言 据有关数据统计&#xff0c;目前来看&#xff0c;大大小小的招聘网站上面&#xff0c;Java岗的招聘量仍然是最多的&#xff0c;基本是其他语言的3倍以上&#xff0c;由于目前Java所处的统治级地位&#xff0c;单就数量来看&#xff0c;Java语言实现的系统是海量的&#x…

linux安装MongoDB

环境说明 系统CentOS&#xff1a;CentOS7 mongodb版本 4.2.24 下载 官网下载地址 Download MongoDB Community Server | MongoDB 某云盘 链接&#xff1a;https://pan.baidu.com/s/1G4AC3h5rvz9WM3fx4gJzbA 提取码&#xff1a;ojkl 上传解压 在根目录下创建opt文件夹…

【数据分析之道-基础知识(九)】推导式

文章目录专栏导读1、前言2、列表推导式3、集合推导式4、字典推导式5、元组推导式专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》&#xff0c;本专栏针对大学生、初级数据分…

C语言学习1--------Visual Studio集成开发环境的搭建

C语言学习1--------Visual Studio集成开发环境的搭建适合初学者适用集成开发环境下载 Visual Studio 2019安装 Visual Studio 2019安装工作负载为C自定义安装位置激活 Visual Studio适合初学者适用集成开发环境 建议初学者适用最新的——Visual Studio 2019为集成开发环境。 部…