实验预习内容

  1. 静态include指令何时执行?主页面和被包含的子页面是否转换为一个转换单元?
    同一个转换单元的页面之间如何共享数据?
    答:静态include指令是在JSP页面转换阶段执行。主页面和被包含的子页面转换为一个转换单元。同一个转换单元的页面之间通过隐含变量共享数据。
  2. jsp:include动作指令何时执行?主页面和被包含的子页面是否转换为一个转换单元?动作包含的子页面与主页面共享同一个请求吗?在不同的转换单元中如何进行数据的传递和共享?
    答:jsp:include动作指令在JSP页面转换阶段执行。主页面和被包含的子页面不转换为一个转换单元。动作包含的子页面与主页面共享同一个请求。在不同的转换单元中通过请求作用域的对象或隐含变量进行数据的传递和共享。
  3. jsp:forward动作与jsp:include动作有什么相同点和不同点?与jsp:forward动作等价的其他两种写法如何表示?
    答:相同点:都可以实现转换页面。不同点:jsp:forward动作在当转发到的页面处理完输出后,并不能控制转回主页面。而且主页面不能包含任何输出。
  4. 什么是JavaBeans?
    答:JavaBeans是java平台的组件技术,在Java Web开发中常用JavaBeans来存放数据、封装业务逻辑等,从而很好地实现业务逻辑和表示逻辑的分离,使系统具有更好的健壮性和灵活性。对程序员来说,JavaBeans最大的好处是可以实现代码的重用,另外对程序的易维护性等也有很大的意义。
  5. 访问JavaBeans的三个JSP动作中jsp:useBean动作的常用属性有哪些?这些属性各有什么作用?
    答 :jsp:useBean动作的常用属性有:id属性:用来唯一标识一个bean实例。scope属性:指定bean实例的作用域。class属性:指定创建bean实例的java类。type属性:指定由id属性声明的变量的类型。

实验内容及要求

  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三个私有数据成员和相应的访问器和设置器。

package com.example.exp03;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>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><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:getProperty name="user" property="username"/><br>Password:<jsp:getProperty name="name" property="password"/> <br>Email:<jsp:getProperty name="user" property="email"/> <br>
</body>
</html>
<%@ page  language="java" contentType="text/html;charset=UTF-8" pageEncoding="utf-8" %>
<%@ page import="com.example.exp03.UserBean" %>
<jsp:useBean id="user" class="com.example.exp03.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>
  1. 使用JavaBean构造一个简单的计算器,能够进行“+、—、*、/”运算。
    【步骤1】编写实现简单计算器的JavaBean:SimpleCalculator.java,包含first、second、operator、result四个成员变量和相应的访问器与设置器,一个calculator方法根据运算符获取运算结果。
    【步骤2】编写calculate.jsp页面,用户通过表单输入两个操作数和运算符,调用该页面自身处理该表单,通过调用SimpleCalculator类的实例实现运算逻辑,并显示运算结果。
public class SimpleCalculator {private float first;private float second;private String operator;private float result;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 getResult() {return result;}public void setResult(float result) {this.result = result;}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;}public SimpleCalculator(float first,float second,String operator,float result){this.first=first;this.second=second;this.operator=operator;this.result=result;}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="cal" class="SimpleCalculator"><jsp:setProperty name="cal" property="*"/>
</jsp:useBean>
<html>
<head><title>calculate</title>
</head>
<body>
<form action="calculate.jsp" method="post"><input type="text" name="first"><select name="operate"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option></select><input type="text" name="second">=<%try{float first= cal.getFirst();float second= cal.getSecond();String op = cal.getOperator();float result= cal.calculate(first,second,op);out.print(result);}catch (Exception e){e.printStackTrace();}%><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对象中提取数据。

Web组件重用与JavaBeans相关推荐

  1. Web实验三 Web组件重用与JavaBeans

    一.实验预习内容 1.静态include指令何时执行?主页面和被包含的子页面是否转换为一个转换单元?同一个转换单元的页面之间如何共享数据? 答:答:静态包含是在JSP页面转换阶段将另一个文件的内容包含 ...

  2. Web组件 – 构建商业化应用的基石

    概述 Web Components(Web 组件)规范是一个新兴的技术集合,允许您在前端Web应用程序中定义已封装的自定义HTML元素. 使用Web Components,您可以创建自己声明的API来 ...

  3. 使用Ext JS,不要使用页面做组件重用,尽量不要做页面跳转

    2019独角兽企业重金招聘Python工程师标准>>> 使用Ext JS,不要使用页面做组件重用,尽量不要做页面跳转 今天,有人请教我处理办法,问题是: 一个Grid,选择某条记录后 ...

  4. Web 组件势必取代前端?

    在现代Web API的发展下,创建可重用的前端组件终于不再需要框架了. 作者 | Danny Moerkerke,JavaScript程序员,自由职业者 译者 | 弯月 责编 | 郭芮 出品 | CS ...

  5. J2EE平台WEB组件开发中如何使用定制标签

    J2EE平台WEB组件开发中如何使用定制标签       J2EE PLATFORM WEB组件开发涉及SERVLET 和JSP技术,SERVLET和JSP各有其优缺点.JVAVABEAN和定制标签对 ...

  6. UCML-领先的B/S应用快速开发工具,基于组件重用和应用框架重用,支持.NET体系,直接生成C#源码;

    UCML-领先的B/S应用快速开发工具,基于组件重用和应用框架重用,支持.NET体系,直接生成C#源码:UCML涵盖了一个WEB应用系统业务开发的全过程,包括数据访问层(O/R映射)定义.业务框架开发 ...

  7. 使用 Vanilla JavaScript 创建 Web 组件

    Web 应用程序开发是一个非常拥挤的技术领域.有不同类型的框架.库和工具.在开发 Web 应用程序时,主要目标是提供带有封装组件的高质量用户界面 (UI). 因此,当您使用 React.Vue.Ang ...

  8. Web 组件代码示例

    在本文中,我提供了对 Web 组件是什么以及如何使用它们的基本理解.使用现实生活中的示例,我将展示 Web 组件如何帮助使应用程序更可预测和更易于维护.此外,我分享了有关如何通过将 HTML/CSS/ ...

  9. 微信拦截URL,使用自己内置的web组件打开URL,为什么没人声讨?

    微信这个软件拦截URL,使用自己内置的web组件打开URL,为什么没人声讨? 按照软件界的规矩,在用户点击URL的时候,微信应该是调用系统的默认浏览器,来打开URL,而它确不要脸的自己打开. 微软当年 ...

最新文章

  1. ubuntu~vim操作
  2. php表单数量,php – 解析具有未知数量字段的表单
  3. 一直用git,你了解git的内部机制吗?
  4. QT、QTE、qtopia区别
  5. 【操作系统】对操作系统的了解
  6. 自行实现高性能MVC
  7. Codeforces Round #739 (Div. 3)(AK实况)
  8. MySQL数据库学习笔记(三)----基本的SQL语句
  9. java泛化_java 类字面常量,泛化的Class引用
  10. java 打印出库单_使用Jasperreporter生成入库出库单打印等报表操作
  11. 安利一款倒计时插件---雨滴桌面
  12. Win10利用bat文件实现文件与文件夹批量重命名
  13. 本地化部署方案 VS 云托管方案
  14. vue2.0 实现页面导航提示引导
  15. iOS 视频播放(AVPlayer)
  16. Cygwin 与 MinGW/MSYS/MSYS2,如何选择?
  17. 所属云服务器无效,常见错误码及解决方案
  18. 如何优雅的写 Controller 层代码?找对姿势!
  19. 【微信小程序】把客服按钮替换成自己想要的图片
  20. 浅析深度学习中优化方法

热门文章

  1. Webpack打包字体图标资源
  2. 2022-2028全球与中国4-甲氧基苯甲酸市场现状及未来发展趋势
  3. Spring Boot 结合 ECharts 实现霸气、美观、高大上 图表分析
  4. 【122期】如何画出一张优秀的架构图(老鸟必备)
  5. 五分钟精通设计模式(一)--速记23种设计模式
  6. Android RecyclerView 绘制流程及Recycler缓存,Android开发者必看避坑指南
  7. Android获取系统铃声与播放
  8. Nmap扫描原理(上)
  9. 支持向量机:PRML:SparseKernelMachine
  10. Hive面试-情景题总结【包含:建表脚本、数据导入脚本、模拟数据】