Java Web应用开发

侯玉香,聂军,雷秦川,骆丽华,陈道敏,苗莹莹,刘叶

目录

  • 1 Java Web概述
    • 1.1 任务导引
    • 1.2 动态网页技术介绍
    • 1.3 JSP的运行环境
    • 1.4 JSP的运行原理
    • 1.5 JSP程序开发模式
    • 1.6 JSP开发工具
    • 1.7 任务实施:搭建项目环境及公司主页设计
    • 1.8 学习测验
  • 2 JSP基本语法
    • 2.1 任务导引
    • 2.2 JSP的基本组成
    • 2.3 脚本元素
    • 2.4 指令元素
    • 2.5 动作元素
    • 2.6 任务实施
    • 2.7 学习测验
  • 3 服务器交互
    • 3.1 任务导引
    • 3.2 课堂实录
    • 3.3 JSP内置对象概述
    • 3.4 out对象
    • 3.5 request对象
    • 3.6 response对象
    • 3.7 session对象
    • 3.8 application对象
    • 3.9 其他内置对象
    • 3.10 任务实施:使用JSP内置对象实现登录和注销功能
    • 3.11 学习测验
  • 4 JavaBean技术
    • 4.1 任务引导
    • 4.2 JavaBean概述
    • 4.3 JavaBean的应用
    • 4.4 JavaBean的作用域
    • 4.5 任务实施
    • 4.6 JSP中的文件操作
    • 4.7 学习测验
  • 5 Servlet技术
    • 5.1 任务引导
    • 5.2 Servlet基础
    • 5.3 Servlet开发
    • 5.4 Servlet常用API
    • 5.5 任务实施
    • 5.6 章节测验
  • 6 第6章 过滤器和监听器
    • 6.1 任务导引
    • 6.2 Servlet过滤器
    • 6.3 过滤器创建与配置
    • 6.4 Servlet监听器
    • 6.5 Servlet3.0新特性
    • 6.6 任务实施
    • 6.7 学习测验
  • 7 Java Web的数据库操作
    • 7.1 任务导引
    • 7.2 JDBC技术
    • 7.3 使用JDBC驱动程序访问数据库
    • 7.4 数据库连接的JavaBean
    • 7.5 JDBC对事务的操作
    • 7.6 连接池技术
    • 7.7 任务实施
    • 7.8 扩展阅读
    • 7.9 章节测验
  • 8 JSP高级技术
    • 8.1 任务导引
    • 8.2 EL概述
    • 8.3 JSTL标签库简介
    • 8.4 JSTL核心标签
    • 8.5 JSP与Ajax
    • 8.6 任务实施
    • 8.7 扩展阅读
    • 8.8 学习测验
  • 9 JSP实用组件技术
    • 9.1 任务导引
    • 9.2 上传与下载组件
    • 9.3 发送E-mail
    • 9.4 JSP动态图表
    • 9.5 在线编辑器
    • 9.6 任务实施
  • 10 教学过程材料
    • 10.1 2024-2025学年第一学期
      • 10.1.1 教学大纲
      • 10.1.2 授课计划
      • 10.1.3 实训指导书
      • 10.1.4 教案
      • 10.1.5 课件PPT
    • 10.2 2024-2025学年第二学期
      • 10.2.1 教学大纲
      • 10.2.2 授课计划
      • 10.2.3 实训指导书
      • 10.2.4 教案
      • 10.2.5 课件PPT
    • 10.3 2025-2026学年第一学期
      • 10.3.1 教学大纲
      • 10.3.2 授课计划
      • 10.3.3 实训指导书
      • 10.3.4 教案
      • 10.3.5 课件PPT
    • 10.4 2025-2026学年第二学期
      • 10.4.1 教学大纲
      • 10.4.2 授课计划
      • 10.4.3 实训指导书
      • 10.4.4 教案
      • 10.4.5 课件PPT
  • 11 课外资料
    • 11.1 电子书
      • 11.1.1 JavaWeb从入门到精通
      • 11.1.2 JavaWeb开发详解
      • 11.1.3 JavaWeb开发之道
      • 11.1.4 深入体验JavaWeb开发内幕-核心基础
      • 11.1.5 学通JavaWeb的24堂课
      • 11.1.6 Java Web 程序设计
      • 11.1.7 Java Web程序设计教程
      • 11.1.8 Java Web设计与应用教程
      • 11.1.9 Java_Web编程新手自学手册
      • 11.1.10 Tomcat and Java Web 开发技术详解
      • 11.1.11 Spring Boot 2+Thymeleaf企业应用实战
      • 11.1.12 Spring Boot+Vue全栈开发实战
      • 11.1.13 Spring实战
      • 11.1.14 JavaEE 8+Tomcat 9
    • 11.2 教学视频
      • 11.2.1 JDBC基础教学视频
      • 11.2.2 JDBC高级应用教学视频
JavaBean概述

4.2.1 什么是JavaBean

组件是独立的模块,在外界不了解其内部实现的情况下,可以通过其提供的接口对组件进行访问。组件可以重用,目前有代表性的组件技术有COM、COM+、JavaBeans、EJB等。ASP通过COM或COM+组件来扩充复杂的功能,如文件上载,发送email,以及将业务处理或复杂计算分离出来独立使用的模块。JSP通过JavaBean组建实现同样的功能扩充,JavaBean可以用来执行负责的计算任务、封装事务逻辑以及封装数据等。

JavaBean是Java的可重用组件技术,实质是一种符合某些命名和设计规范的Java类。 应用JavaBean的主要目的是实现代码重用,便于维护和管理。在JSP的Web应用中集成JavaBean组建,由JavaBean处理业务逻辑,然后在JSP中调用,而JSP页面着重网页界面的设计,可以实现业务逻辑和前台显示的部分分离。

使用JavaBean的好处可以总结如下

1)可以使得JSP页面变得清晰(业务逻辑和前台显示分离);

2)节省软件开发时间(可以直接使用已经测试和可信的已有组件,避免了重复开发);

3)降低系统维护的难度

4)为JSP应用带来了更多的可伸缩性,使系统变得健壮和灵活。 

JavaBean的类型

1)一类是可视的JavaBean,即传统的JavaBean应用于可视化界面(如java图形界面中使用的按钮、文本框或列表框等等);

2)另一类是非可视化的JavaBean,封装逻辑、封装数据,与JSP搭配使用。

【案例】通过非可视化的JavaBean,封装邮箱地址对象,通过JSP页面调用该对象来验证邮箱地址是否合法。

(1)创建名称为Email的JavaBean对象,用于封装邮箱地址,代码如下:

package experiment;

import java.io.Serializable;

public class Email implements Serializable {

//  serialVersionUID ֵ

private static final long serialVersionUID = 1L;

// Email地址ַ

private String mailAdd;

// 是否是一个标准的Email地址ַ

private boolean eamil;

/**

* 默认无参的构造方法

*/

public Email() {

}

/**

* 构造方法

* @param mailAdd Email地址ַ

*/

public Email(String mailAdd) {

this.mailAdd = mailAdd;

}

/**

* 是否是一个标准的Email地址ַ

* @return 布尔值ֵ

*/

public boolean isEamil() {

// 正则表达式,定义邮箱格式

String regex = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"; 

// matches()方法可判断字符串是否与正则表达式匹配

if (mailAdd.matches(regex)) { 

// eamil为真

eamil = true;

}

// 返回email

return eamil;

}

public String getMailAdd() {

return mailAdd;

}

public void setMailAdd(String mailAdd) {

this.mailAdd = mailAdd;

}

}

(2)创建名称为index.jsp的页面,它是程序中的首页,用于放置验证邮箱的表单,该表单的提交地址为result.jsp页面,代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

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

<table align="center" width="300" border="1" height="150">

<tr>

<td colspan="2" align="center">

<b>邮箱认证系统</b>

</td>

</tr>

<tr>

<td align="right">邮箱地址:</td>

<td><input type="text" name="mailAdd"/></td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" />

</td>

</tr>

</table>

</form>

</body>

</html>

(3)创建名称为result.jsp的页面,对index.jsp页面中的表单进行处理,在此页面中实例化Email对象,对邮箱地址进行验证,并将验证结果输出到页面中,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="experiment.Email"%><html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<div align="center">

<%

// 获取邮箱地址

String mailAdd = request.getParameter("mailAdd");

// 实例化Email,并对mailAdd赋值

Email email = new Email(mailAdd);

// 判断是否是标准的邮箱地址

if(email.isEamil()){

out.print(mailAdd + " <br>是一个标准的邮箱地址!<br>");

}else{

out.print(mailAdd + " <br>不是一个标准的邮箱地址!<br>");

}

%>

<a href="index.jsp">返回</a>

</div>

</body>

</html>

实例运行结果如下:




4.2.2 JavaBean规范

该类是一个公有类,并用package语句声明属于某个包;

该类实现了java.io.Serializable接口;

该类如果有构造方法,那么这个构造方法是公有(用public修饰)并且无参数的; 

该类的属性一般是私有(用private修饰)的;

私有属性有公有(用public修饰)的访问器方法;例如:私有属性xxx的读取方法为getXxx(),设置方法为setXxx(),如果属性类型为boolean,它的读取方法为isXxx()。

该类的方法一般是共有的。

(说明:如果在JSP中使用JavaBean组件,创建的JavaBean不必实现java.io.Serializable接口仍然可以运行)

案例4-1 JavaBean示例。

package ch4;

import java.io.Serializable; 

public class Person implements Serializable{

private String name;

private String sex;

private int age;

public Person(){

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}