JSP与Servlet技术

一、Servlet 基础知识

  • Servlet 是 Java Web 应用程序中的组件技术,是运行在服务器端的 Java 应用程序,实现与 JSP 类似的功能。Servlet 本身是一个 Java 类,可以动态地扩展服务器的能力。Web 服务器执行 JSP 文件时,JSP 容器会将其转译为 Servlet 文件,并自动编译解释执行。JSP 中使用到的所有对象都将被转换为 Servlet,然后被执行。
  • Servlet 接收来自客户端的请求,将处理结果返回给客户端。

1.什么是 Servlet

  • Servlet 是运行在 Web 服务器上的 Java 程序,作为来自 Web 浏览器或其他 HTTP 客户端的请求与 HTTP 服务器上的数据库和应用程序之间的中间层。所有的 JSP 文件都要事先转换为一个 Servlet 才能运行。

  • Servlet 在服务器端处理用户信息可以完成以下任务:

  • 获取客户端浏览器通过 HTML 表单提交的数据及相关信息

  • 创建并返回对客户端的动态响应页面

  • 访问服务器端资源,如文件、数据库

  • 为 JSP 页面准备动态数据,与 JSP 一起协作创建响应页面

2.Servlet 生命周期

  • Servlet 是在服务器端运行的。Servlet 是 javax.servlet 包中 HttpServlet 类的子类,由服务器完成该子类的创建和初始化。Servlet 生命周期定义了一个 Servlet 如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。Servlet 生命周期主要由3个过程组成。

(1)init() 方法:服务器初始化

  • 当首次创建 Servlet 时才会调用 init() 方法,而不是每个用户请求都调用。当用户首次调用对应于 Servlet 的 URL 或再次启动服务器时,就会创建 Servlet。当有客户请求 Servlet 服务时,Web 服务器将启动一个新的线程,在线程中调用 service() 方法响应客户的请求。

(2)service() 方法:初始化完毕,Servlet 对象调用该方法响应客户的请求

  • 对于每个请求,Servlet 引擎都会调用此 service() 方法,并把 Servlet 的请求对象和响应对象传递给该方法作为参数。方法声明如下:
public void service(ServletRequest request,ServletResponse response)
  • 其中,request 对象和 response 对象由 Servlet 容器创建并传给 service() 方法,service() 方法会根据 HTTP 请求类型,调用响应的 doGet() 或 doPost() 等方法。service() 方法可以被调用多次。

(3)destroy() 方法:调用该方法销毁 Servlet 对象

  • 当 Servlet 被卸载时 destroy() 方法被自动调用。该方法用来释放 Servlet 占用的资源,比如数据库连接、Socket 连接等。destroy() 方法只会被调用一次。

3.Servlet 的技术特点

(1)有效性

  • 不同于传统的 CGI(需要为每一项 HTTP 请求新进程),在使用 Servlet 时,可以存在 n 个线程,而只使用 Servlet 类的一个副本。且在完成响应后,Servlet 仍然保留在内存中,因此,可以直接在请求之间存储任意复杂的数据。

(2)方便性

  • Servlet 包含扩展基础结构,能够自动对 HTML 表单数据进行分析和解码、读取和设置 HTTP 头、处理 Cookie、跟踪会话以及实现许多其他类似的高级功能。

(3)功能强大性

  • Servlet 可以支持几种功能。Servlet 可以直接与 Web 服务器对话,例如,与 Web 服务器的通信更易于将相对 URL 转换成具体的路径名。多个 Servlet 之间还能共享数据,这更易于实现数据库连接共享和类似资源共享优化操作。Servlet 还可以保留不同请求的信息,从而简化了类似会话跟踪和缓存早期计算结果的一些技术。

(4)可移植型

  • Servlet 是使用 Java 编程语言并遵循标准的 API 编写的,所以几乎不用进行任何更改便可以在各种服务器上运行。

(5)安全性

  • 与传统的 CGI 程序相比,Servlet 更安全。

(6)便宜

3.Servlet 与 JSP 的区别

  • Servlet 是一种在服务器端运行的 Java 程序。而 JSP 是继 Servlet 后 Sun 公司推出的新技术,它是以 Servlet 为基础开发的。Servlet 是 JSP 的早期版本,在 JSP 中,更加注重页面的表示,而在 Servlet 中则更注重业务逻辑的实现。因此,在编写的页面显示效果比较复杂时,首选 JSP。或者在开发过程中,HTML 代码经常发生变化,而 Java 代码则相对比较固定时,可以选择 JSP。在处理业务逻辑时,首选则是 Servlet。同时,JSP 只能处理浏览器的请求,而 Servlet 则可以处理一个客户端的应用程序。因此,Servlet 加强了 Web 服务器的功能。
  • Servlet 与 JSP 相比有以下几点区别:

(1)编程方式不同

  • Servlet 是按照 Java 规范编写的 Java 程序,JSP 是按照 Web 规范编写的脚本语言。

(2)编译方式不同

  • Servlet 每次修改后需要重新编译才能运行,JSP 被 JSP 容器编译为 Servlet 文件。

(3)运行速度不同

  • 由于一个 JSP 页面在第一次访问时要被编译成 Servlet,需要一段时间,所以客户端得到响应所需要的时间比较长。当该页面再次被访问时,它对应的.class文件已经生成,不需要再次翻译和编译,JSP 引擎可以直接执行.class文件,因此,JSP 页面的访问速度会大为提高。总之,在运行速度上,Servlet 比 JSP 快。

5.Servlet 在 Java Web 项目中的作用

(1).Servlet 在服务器端的作用

  • 客户端访问服务器时,所有的 JSP 文件都会转化为 Servlet 文件,Servlet 文件负责在服务器端处理用户的数据。这部分功能在开发服务器时已经封装成内部的功能,人们不用关心,除非自己开发一个服务器才需要了解。

(2).Servlet 在 MVC 设计模式中的应用

  • MVC 设计模式是目前用得比较多的一种设计模式,被广泛用于 Web 应用程序中。Model(模型)表示业务逻辑层,View(视图)代表表示层,Controller(控制器)代表控制层。其中,控制器部分由 Servlet 完成,这也是在项目开发中实际用到的 Servlet。

(3).Servlet 在 Java Web 框架中的应用

  • 在 Java Web 项目开发中用到的猪獒组件技术有 JSP、Servlet、JavaBean、JDBC、XML、Tomcat 等。为了整合 Java Web 组件技术并提高软件开发效率,近年来推出了许多基于 MVC 模式的 Web 框架技术,如 Struts、Maverick、WebWork、Turbine 和 Spring 等。其中比较经典的框架技术是 Struts。
  • 在 Struts 框架技术中,实现了 MVC 模式,其中已封装好的核心控制器由 Servlet 实现;人们还需要实现 Action 来完成对数据流量的控制。在 Struts 1.x 版本中由 Servlet 实现控制功能,在 Strutds 2.x 版本中 Action 是业务控制器,由 Java 类来实现。

6.Servlet 部署

  • 部署描述符文件可配置 Servlet 的名字、Servlet 的类、初始化参数、启动转入的优先级、Servlet 的映射、运行的安全设置、过滤器的名字和类以及它的初始化参数。

  • 部署描述符文件是 Java EE 程序的重要组成部分,其主要功能包括以下几个方面。

  • 用于 Servlet 和 Web 应用程序的初始化。通过配置文件,可以减少初始化值的硬编码。

  • Servlet/JSP 定义。在 Web 应用程序中的每个 Servlet 和预编译的 JSP 文件都应在部署描述符文件中定义。

  • MIME 类型定义。可以在部署描述符文件中为每种内容定义 MIME 类型。

  • 安全控制。可以使用部署描述符文件控制对应用程序的访问。

  • 一个标准的部署描述符文件(web.xml)通常放在 /WEB-INF 目录下。

  • 配置 Servlet 文件的部署描述符文件(web.xml),代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>example_Servlet</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><servlet-name>FirstServlet</servlet-name><servlet-class>servlet.FirstServlet</servlet-class></servlet><servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/FirstServlet</url-pattern></servlet-mapping></web-app>

7.开发一个简单的 Servlet

  • Java Servlet 应用实例(FirstServlet.java),代码如下:
package servlet;import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;// Servlet 文件继承父类 HttpServlet
public class FirstServlet extends HttpServlet{protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{response.setContentType("text/html;charset = UTF-8");PrintWriter out = response.getWriter();try {out.println("<html>");out.println("<head>");out.println("<title>Servlet FirdtServlet</title>");out.println("</head>");out.println("<body>");out.println("<h1>这是我的第一个 Servlet 文件"+request.getContextPath()+"</h1>");out.println("</body>");out.println("</html>");}finally {out.close();}}//使用 Servlet 文件时常用的两种方法之一,如果表单中请求方式是 get,调用 doGet 方法执行protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{processRequest(request,response);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{processRequest(request,response);}//获取 Servlet 版本信息,在 MVC 编程中可以不使用该方法,可以删除public String getServletInfo() {return "Short description";}
}
  • 文件结构如图所示:

  • 页面效果如图所示:

JSP程序设计实训(十一)——JSP与Servlet技术(一)相关推荐

  1. JSP程序设计实训(一)—— JSP概述

    下一篇:JSP程序设计实训--JSP开发平台与Tomcat服务器 JSP概述 一.学习目的 了解JSP技术的基础理论知识,要求了解JSP的工作原理以及使用JSP开发Web项目的主要方式. 二.Web技 ...

  2. JSP程序设计实训——通信资费管理系统

    通信资费管理系统 目的是实现通信资费管理系统的静态页面设计,要求能够逐步掌握Java Web项目开发的流程和页面的设计.案例分为三部分实现,分为案例需求分析.案例架构分析和案例开发(编程实现). 一. ...

  3. [JSP暑假实训] 二.JSP网站创建及Servlet实现注册表单提交、计算器运算

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 本篇文章开始讲 ...

  4. JSP程序设计实训(十二)——MVC设计模式

    MVC 设计模式 MVC(Model-View-Controller)把一个应用的输入.处理.输出流程按照 Model.View.Controller 的方式进行分离,这样一个应用被分成三层:模型层. ...

  5. [JSP暑假实训] 四.MyEclipse+Servlet+JSP实现火车票网站查询、修改、删除操作

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 前一篇文章讲解 ...

  6. [JSP暑假实训] 三.MySQL数据库基本操作及Servlet网站连接显示数据库信息

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 前一篇文章讲解 ...

  7. [JSP暑假实训] 五.MyEclipse+Servlet+JSP实现火车票网站注册操作及登陆验证

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 前一篇文章讲解 ...

  8. JSP实习实训管理系统myeclipse开发mysql数据库WEB结构java编程

    一.源码特点   JSP 实习实训管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发. JSP实习实训管理系统my ...

  9. c语言程序设计教程王建feng,C语言程序设计实训指导与习题

    本书由"C语言程序设计"上机步骤及运行环境搭建,"C语言程序设计"实训,"C语言程序设计"习题三部分组成.通过实训.习题等内容,着力解决工程 ...

最新文章

  1. 一起走进计算机视觉的世界
  2. 业界丨2018,人工智能革命走向风口浪尖
  3. 软件项目管理0706:工匠精神
  4. android 标题栏进度圈使用方法,Android 自定义标题栏 显示网页加载进度的方法实例...
  5. 从源码分析RocketMQ系列-Remoting通信架构源码详解
  6. FPGA双沿采样之Verilog HDL实现
  7. java中输出拼json,java poi 解析excel 输出json 并且拼接字符串显示到jsp
  8. python 脚本所在目录,Python 获取当前所在目录的方法详解
  9. 简单理解RocketMQ---入门
  10. 南宁公交有两个应用付费通道,互不通用
  11. python定义和调用函数
  12. div contenteditable=true各个浏览器上的解析
  13. 重装系统后没有网卡驱动
  14. python 抢票程序_程序员硬核Python抢票教程”,帮你抢回家车票
  15. [Vue warn]: Error in callback for watcher “lists“: “TypeError: Cannot read property ‘length‘ of unde
  16. 连接GitHub提示远程主机关闭连接
  17. 电脑售后服务人员无奈的一天-爆笑
  18. 如何快速把多个excel表合并成一个excel表(不熟悉vba及公式的人)
  19. iview导出使用了前端分页的所有表格数据
  20. 普通物理拾遗----热学

热门文章

  1. intelliJ IDE 打包出错:F:/InterlliJ IDEA/Demo/src/main/java/META-INF/MANIFEST.MF' already exists in VFS
  2. linux系统硬盘 转换格式,怎么在LINUX系统里修改硬盘格式呢?
  3. 技术实践干货 | 初探大规模 GBDT 训练
  4. 特征频率、最y大振荡频率、截止频率有什么关系和异同
  5. 【图像分类】实战——使用ResNet实现猫狗分类(pytorch)
  6. 无线网服务器亮红灯什么情况,无线网猫光信号闪红灯是什么原因
  7. Winform(XtraReport)实现打印方法(转载)
  8. 视频转文字怎么操作?这些方法值得收藏
  9. Java实现 LeetCode 37 解数独
  10. java程序员 待遇_Java程序员之间薪资对比,为什么差距这么大?