前言
java学习之初,我们经常会看到或使用到Servlet与JSP,本篇博文将详细介绍这二者以及它们之间的关系。
一、Servlet
是什么?
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于处理各种业务逻辑,生成动态Web内容。
为什么用?
优点 | 具体阐述 | |
---|---|---|
1 | 功能强大 | 可调用java API中的对象和方法,对HTTP请求进行相应的处理等 |
2 | 可移植 | 运行不依赖操作系统平台 |
3 | 性能高效 | Servlet对象在Servlet容器启动时被初始化,当对象第一次被请求时,Servlet容器将其实例化,如果存在多个请求,该Servlet对象不会再被实例化,每个请求是一个线程 |
4 | 安全性高 | 使用了java的安全框架 |
5 | 可扩展 | 由java语言编写,继承了java的面向对象的优点,可以通过封装、继承扩展业务需要 |
二、JSP
是什么?
JSP(Java Server Pages——java服务器页面),其根本是一个简化的Servlet设计,是一种动态网页技术标准。
JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。
为什么用?
没有JSP,Servlet可以实现开发需求吗?答案是可以。在JSP产生之前,Servlet负责页面设置及与业务逻辑代码,它可以完全满足对web应用的开发需求。
那为什么还要使用JSP呢?原因主要有两个方面:
1、Servlet自身的缺点
(1)所有的HTML代码都需要Servlet的固定方法输出,操作复杂
(2) 页面中用到的CSS样式代码、JS脚本代码极大的增加了代码量,不利于代码的阅读和编写
2、JSP独特的优势
优点 | 具体阐述 | |
---|---|---|
1 | 跨平台 | 1、可以应用于不同的系统、操作系统的数据库、web服务器 2、由于应用JSP技术开发的项目可以不加修改的应用到任何不用的平台上,很好的体现了java“一次编写,到处运行”的特点 |
2 | 业务代码分离 | JSP技术开发的项目,使用HTML语言来设计和格式化静态页面的内容,使用JSP标签和Java代码片段来实现动态部分。业务处理代码可以由JavaBean、Servlet、Struts等实现。因此修改业务代码不会影响到JSP。 |
3 | 组件重用 | JSP可以使用JavaBean编写业务组件,也可以作为数据存储模型,在JSP页面甚至整个项目、其他java应用,都可以重复使用这个JavaBean。 |
4 | 基于Java Servlet功能 | Servlet是JSP出现以前的主要JavaWeb处理技术,JSP最终会编译成Servlet才能处理用户请求,因此JSP拥有Servlet的所有功能和特性。 |
5 | 预编译 | 用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并将编译好的代码保存,用户下次访问时,直接执行编译好的代码,无需再次编译。这样可以节约cpu资源,提高客户端访问速度。 |
怎么用?
(一)JSP页面执行过程
1、客户端通过浏览器向服务器发出请求,在该请求中包含了请求的资源的路径,这样当服务器接收到该请求就可以知道被请求的资源。
2、服务器根据接收到的客户端的请求来加载被请求的JSP文件
3、Web服务器中的JSP引擎会将被加载的JSP文件转化为Servlet
4、JSP引擎将生成的Servlet代码编译成Class文件
5、服务器执行这个Class文件
6、服务器将执行结果发送给浏览器显示
(二)Web服务器
Web服务器是运行和发布Web应用的大容器,只有将开发的Web项目放置到Web容器中,才能使网络中的所有用户通过浏览器进行访问。开发Web应用采用的服务器主要有以下几种:Apache Tomcat、WebLogic服务器、IBM WebSphere应用服务器等。
(三)页面的基本构成
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateFormat"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>JSP——demo</title>
</head>
<body>
<%
Date date=new Date(); //获取日期对象
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期时间格式
String today=df.format(date); //获取当前系统时间
%>
当前时间:<%=today%> <!-- 输出系统时间 -->
</body>
</html>
(四)标识
标识内容 | 分类 | 备注 |
---|---|---|
脚本标识 | JSP表达式 | <%= 表达式 %> 表达式可以是任何java语言的完整表达式 |
声明标识 | <%! 声明变量或方法的代码 %> | |
代码片段 | <% Java代码 / 脚本代码 %> | |
指令标识 | page指令 | 1、<%@ page 属性1=“属性值1” 属性2=“属性值2” %> 2、用于定义整个页面的相关属性 3、共有13个属性:language、contentType、pageEncoding、import、autoFlush、buffer、errorPage、extends、info、isELIgnored、isErrorPage、isThredSafe、session具体内容 |
inlude指令 | 1、<%@ include file=“path“ %> 2、用于在一个JSP页面包含另一个JSP页面 |
|
taglib指令 | 1、<%@ taglib prefix=”tagPrefix” uri=”tagURI” %> 2、prefix:用于指定标签的前缀(不能是jsp、jspx、java、javax、sun、servlet、sunw) uri:指定标签库文件的存放位置 |
|
动作标识 | 用途:在JSP的请求处理阶段按照在页面中出现的顺序被执行的,用于实现某些特殊用途 | 格式:<以下jsp相关内容> |
操作JavaBean | jsp:useBean 包括:jsp:setProperty jsp:getProperty |
|
包含外部文件 | jsp:include | |
执行请求转发 | jsp:forward | |
设置参数的子动作 | jsp:param |
三、Servlet与JSP的区别
Name | Academy |
---|---|
角色 | JSP可以存在Java代码和HTML代码并存的情况,Servlet只有调用固定的方法才能将动态内容输出为静态的HTML,因此,JSP是显示层,Servlet是业务逻辑层。 |
编程方法 | JSP需要遵循一定的脚本语言规范,Servlet遵循java的标准。 |
速度 | JSP页面由JSP容器管理,每次执行不同内容的动态JSP页面时,JSP容器都要对其自动编译,效率较低。Servlet在编译完成后,不需要再次编译,可以直接获取及输出动态内容。 |
运行 | JSP文件创建或修改,不需要编译就可以执行,Servlet需要在java编译器编译后才可以运行。 |
小结
JSP和Servlet是java学习的基础内容,它们之间的对比学习更是值得我们学习和关注的问题。