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高级应用教学视频
Servlet3.0新特性


Servlet 3.0在Servlet 2.5版本的基础上提供了若干新特性用于简化Web应用的开发和部署。其中有几项特性的引入获得了Java开发人员的赞誉:

(1) 新增的注解支持

(2) 异步处理支持

(3) 可插性支持

1.注解代替配置文件

需要注意的是,如果使用Servlet3.0版本的话:首先Tomcat服务器必须使用7.0版本以上的(老版本不提供3.0版本),其次Eclipse创建Web工程时选择3.0版本。

Servlet3.0版本允许使用注解方式来替代web.xml文件中配置Servlet、Filter和Listener的信息

(1)使用注解替代web.xml文件配置Servlet

@WebServlet(urlPatterns="/*",initParams={@WebInitParam(name="lanmin",value="蓝敏")},loadOnStartup=0)

public class ServletTest extends HttpServlet {

    @Override

    protected void doGet(HttpServletRequest req,         

     HttpServletResponse resp)throws ServletException, IOException{

        super.doGet(req, resp);

    }

}

(2)使用注解替代web.xml文件配置Filter

@WebFilter(urlPatterns="/*",initParams={@WebInitParam(name="lanmin",value="蓝敏")})

public class FilterTest implements Filter {

@Override public void init(FilterConfig arg0) throws ServletException {}

            @Override

            public void doFilter(ServletRequest arg0, ServletResponse arg1,            

                       FilterChain arg2) throws IOException, ServletException {}

            @Override

            public void destroy() {}

(3)使用注解替代web.xml文件配置Listener

@WebListenerpublic class ListenerTest implements HttpSessionListener {

@Override                                                                                                                                             public void sessionCreated(HttpSessionEvent arg0) {}

@Override                                                                                                                                             public void sessionDestroyed(HttpSessionEvent arg0) {}


}


下表对新增的@WebFilter注解支持作进一步的介绍。

属性名

类型

描述

filterName

String

指定过滤器的name属性,等价于<filter-name>

value

String[]

该属性等价于urlPatterns 属性。但是两者不应该同时使用。

urlPatterns

String[]

指定一組过滤器的URL匹配模式。等价于<url-patterm>标签。

ServletNames

String[]

指定过滤器将应用于哪些Servlet。取値是@WebServlet中的name 属性的取值,或者是web.xml中<servlet-name> 的取值。

dispatcherTypes

DispatcherType

指定过滤器的转发模式。具体取值包括:     ASYNC、 ERROR、 FORWARD、 INCLUDE、 REQUEST。 

initParams

WeblnitParam[]

指定一組过滤器初始化参数,等价于<init-param>标签。

asyncSupported

boolean

声明过滤器是否支持异步操作模式,等价于<async-supported>标签。

description

String

该过滤器的描述信息,等价于<description>标签。

displayName

String

该过滤器的显示名,通常配合工具使用,等价于<dis play-name>标签。


2.servlet异步处理

        所谓异步处理就是指数据发送方发送数据给数据接收方后,不必等待数据接收方作出响应,可以继续发送下一个数据的通信方式。

Servlet3.0版本提供了相关异步处理的功能,具体实现方式如下:

(1)需要使用注解在对应Servlet配置asyncSupported=true,表示当前Servlet支持异步。

(2)通过Request对象的startAsync(Request,Response)方法获取异步上下文对象。

(3)通过异步上下文对象调用start(newRunnable(){})方法开始。


【案例6-7】servlet异步处理AsyncServlet.java。


3.servlet可插性支持

        如果说 3.0 版本新增的注解支持是为了简化 Servlet、Filter和Listener的声明,从而使得web.xml变为可选配置, 那么新增的可插性(pluggability)支持则将 Servlet 配置的灵活性提升到了新的高度。

        使用该特性,现在我们可以在不修改已有 Web 应用的前提下,只需将按照一定格式打成的 JAR 包放到 WEB-INF/lib 目录下,即可实现新功能的扩充,不需要额外的配置。

       现在,为一个 Web 应用增加一个 Servlet 配置有如下三种方式 ( 过滤器、监听器与 Servlet 三者的配置都是等价的,故在此以 Servlet 配置为例进行讲述,过滤器和监听器具有与之非常类似的特性 ):

        编写一个类继承自 HttpServlet,将该类放在 classes 目录下的对应包结构中,修改 web.xml,在其中增加一个 Servlet 声明。这是最原始的方式;

        编写一个类继承自 HttpServlet,并且在该类上使用 @WebServlet 注解将该类声明为 Servlet,将该类放在 classes 目录下的对应包结构中,无需修改 web.xml 文件。

        编写一个类继承自 HttpServlet,将该类打成 JAR 包,并且在 JAR 包的 META-INF 目录下放置一个web-fragment.xml 文件,该文件中声明了相应的 Servlet 配置。

web-fragment.xml 文件示例如下:

<?xml version="1.0" encoding="UTF-8"?><web-fragment     xmlns=http://java.sun.com/xml/ns/javaee    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"    metadata-complete="true">

    <servlet>

        <servlet-name>fragment</servlet-name>

        <servlet-class>footmark.servlet.FragmentServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>fragment</servlet-name>

        <url-pattern>/fragment</url-pattern>

    </servlet-mapping>

</web-fragment>