JSP/Servlet
第一:前言
什么是C/S?
Client/Server( 客户端/服务器)
什么是B/S?
Brower/Server( 浏览器/服务器)
什么是Web 应用程序?
B/S系统相对C/S系统的优势是什么?
B/S是浏览器端/ 服务器端模式,程序完全放在服务器上,不用在浏览器上安装任何文件,它是基于Internet的产物
B/S中浏览器端与服务器端采用请求/ 响应模式进行交互
动态和静态页面
www.hao123.com-----静态网页
www.google.com-----动态网页
静态网页:内容不变,不管什么请求都给予相同的结果
什么是动态网页
生活中的动态网页
怎样实现动态网页
网站的访问
URL :Uniform ResourceLocator
–即统一资源定位系统,就是我们通常所说的网址
– URL 是惟一能够识别Internet 上具体的计算机、目录或文件位置的命名约定
URL 的组成:
HTTP协议
HTTP 协议使用以下方法发送请求信息:
q GET 方法
q POST 方法
GET 方法
q 用于检索信息(如文档、图表或数据库请求结果)
q 请求的页面可以被设置为书签和使用电子邮件发送
q 请求信息作为查询字符串发送(255)
POST 方法
q 用于发送敏感信息(如信用卡号)或要保存到数据库中的信息
q 请求的页面不能设置为书签或不能通过电子邮件发送
q 发送的数据没有
Web服务器
Web服务器其实是一个实现HTTP服务端协议的程序
常用的Web服务器
– IIS
– Apache
– Tomcat
tomcat 文件目录介绍
bin目录:存放tomcat 可执行指令的目录
– startup 启动服务器
– shutdown 停止服务器
conf 目录:存放tomcat 的配置文件
– server.xml 服务器的主配置文件
– web.xml 定义所有Web应用的配置
– tomcat -user.xml 配置tamcat 用户的信息
webApps目录:存放tomcat 服务器发布的所有Web应用
发布一个静态页面到Tomcat
1 、在tomcat/webapps 目录下新建一个文件夹:取名firstWebApp
2 、在firstWebApp 目录下放入一个静态页面文件
3 、在firstWebApp 目录下再新建一个文件夹:取名WEB -INF( 固定名称),往这个文件夹下面放入一个文件为web.xml,内容只写” <web-app></web-app> ”
4 、启动服务器
Web项目的目录结构
第二:什么是JSP
JSP (Java Server Pages )是指:
–在HTML中嵌入Java 脚本语言
–由应用服务器中的JSP 引擎来编译和执行嵌入的Java脚本语言命令
–然后将生成的整个页面信息返回给客户端
JSP 执行过程
Web容器处理JSP 文件请求需要经过3 个阶段:
–翻译阶段:JSP 文件被Web容器中的JSP 引擎转换成Java 源码
–编译阶段:Java 源码会被编译成可执行的字节码
–执行阶段:容器接受了客户端的请求后,执行编译成字节码\的JSP 文件;处
理完请求后,容器把生成的页面反馈给客户端进行显示
第一次请求之后,Web容器可以重用已经编译好的字节码文件
注意:如果对JSP 文件进行了修改,Web容器会重新对JSP 文件进行翻译和编译
JSP 页面组成
JSP 页面的元素包括
<%@ …… %>定义JSP 页面的指令,一般写在JSP 页面的最上方
– page 指令用于定义JSP 文件中的全局属性
<%! …… %>用于定义整个JSP 页面中都能使用到的全局变量或方法,相当于在一个 类中定义其成员
<%…… %>用于包括一段JAVA程序,这段程序称为JSP脚本,相当于一个类中的代码块
<%= …… %>用于包括一个表达式,表达式一定要有明确的返回值
注释:
Ø JSP 表达式的使用:
q 表达式的概念
表达式是对数据的表示,系统将其作为一个值进行计算和
显示
q 表达式在JSP页面中的表现形式
<% = Java表达式 %>
q 示例:
<body>
<h1>JSP表达式 </h1>
<b>PI 的值:</b><%=Math.PI%><br />
<b>100,99中最大的值 :</b><%=Math.max(100,99)%><br/>
<b>100,99中最小的值 :</b><%=Math.min(100,99)%><br/>
<b>3+2-5的值 :</b><%=3+2-5%><br/>
<b>(3+2)==5的值 :</b><%=(3+2)==5%><br/>
<b>(3+2)!=5的值 :</b><%=(3+2)!=5%><br/>
</body>
Ø JSP Scriptlet(小脚本)
q JSP Scriptlet概念
JSP Scriptlet就是在JSP页面里嵌入一段Java代码
q JSP Scriptlet在JSP页面中的表现形式
<% Java代码 %>
q 示例:
<body>
<h1>以直角三角形的形式显示数字</h1>
<%
for(inti=1;i<10;i++) {
for(int j=1;j<=i;j++) {
out.println(j);
}
out.println("<br/>");
}
%>
</body>
Ø JSP 声明
q JSP 声明的概念
JSP声明就是在JSP页面中声明Java方法或变量等
q JSP声明在JSP页面中的表现形式
< % ! Java 代码 %>
q 示例:
<%!
//申明一个常量
final String SEPARATOR =".";
//声明一个方法
public StringcovertAmountWithSeparator(String money){
nt index = money.indexOf(SEPARATOR);
tring str =money;
if(index==-1){
tr = money+".00";
}
return str;
}
%>
Ø JSP 指令
q page 指令用于设置JSP 页面的属性
u 示例:
<%@ page language = "Java" import "java.util.*"buffer = "8kb"
errorPage="error.jsp" isErrorPage="false"%>
<html>
<head>
<title> 测试page 指令</title>
</head>
<body>
<h1> 这是一个测试页面</h1>
</body>
</html>
q include 指令:用于在运行时将 HTML文件或 JSP页面嵌入到另一个
JSP页面
u include 指令语法
<%@ include file = ”文件名”%>
u include 指令用法
示例1:
<html>
<head> include 指令测试页面
</head>
<body>
<%@ include file = "/test.html" %>
</body>
</html>
示例2:
<%@page language="java"%>
<%@include file="head.jsp"%>
<html>
<head>
<title></title>
</head>
<body>
<br>
<br>
<h4 align="center">你好,欢迎来到北大青鸟APTECH!</h4>
</body>
</html>
Ø taglib指令
q taglib指令可以让JSP页面使用标签
taglib 指令的作用是在JSP页面中,将标签库描述符文件引入到该页面中,并设置前缀,而去利用标签的前缀去使用标签库表述文件中的标签
q 语法
<%@ taglib uri = ”标签库表述符文件”prefix = ”前缀名”%>
q taglib 指令的使用
q JSP 脚本由三个元素组成,即 JSP表达式、JSP Scriptlet 和 JSP 指令
q JSP 表达式包括在 <%=%>内; Scriptlet 包含在<% %>内;声明包含在<%! %>内
q JSP 指令共有三种类型,即 page、include 和 taglib。JSP 指令包括在 <%@ 和 %>内
q page 指令用于设置 JSP 页面的属性;include 指令用于在 JSP 页面嵌入其他文件;taglib 指令用于在JSP页面中使用标签
JSP 运行环境
Web容器(如:Tomcat )提供JSP 引擎,负责JSP 文件的执行,提供JSP 的运行时环境
在MyEclipse 中部署Web应用,等同于在Web容器中部署Web应用
JSP 的内置对象
JSP内置对象说明:
q JSP 隐式对象是Web 容器加载的一组类
q 它不像一般的Java对象那样用”new”去获取实例,而是可以直接在JSP页面使用的对象
q 隐式对象的名称是JSP 的保留字
q JSP 使用Java 定义的隐式对象来访问网页的动态内容
输入/输出
JSP 内置对象(输入/输出)request
request 对象主要用于处理客户端请求
实现javax.servlet.http.HttpServletRequest接口
使用HTTP 协议处理客户端的请求
q 使用request对象进行JSP编程
需求:某网站注册时,需要输入注册信息,请编写JSP页面供用户输入,并获取用户输入的数据。注册信息包括用户名、密码、确认密码、性别、学历和你从哪里知道本网站等主题。
分析:
1、编写一个JSP页面,提供用户输入的表单组件。
2、编写另一个JSP页面,获取用户提交的请求数据,并
显示出来。
<%!
public String formatStr(String str){
return str==null?"":str;
}
%>
<%
String name = formatStr(request.getParameter("name"));
String pwd = formatStr(request.getParameter("pwd"));
String confirm_pwd
= formatStr(request.getParameter("confirm_pwd"));
String gender =formatStr(request.getParameter("gender"));
String xueli = formatStr(request.getParameter("xueli"));
String[] channels =request.getParameterValues("channel");
%>
JSP 内置对象(输入/输出)response
q response 对象用于响应客户请求并向客户端输出信息
q 实现javax.servlet.http.HttpServletResponse 接口
q response 对象常用方法
q void setContentType(String name)
设置作为响应生成的内容的类型和字符编码
q voidsendRedirect (String name) ---重定向
发送一个响应给浏览器,指示其应请求另一个URL
q 使用response对象进行JSP编程
JSP内置对象(输入/输出)out
q 表示输出流
q javax.servlet.jsp.JspWriter 类的实例
q 使用 write()、print() 和 println() 方法
q 使用out对象进行JSP编程
q
作用域通信对象
q 隐式对象的作用域包括page、request、session 和 application
q 作用域通信对象包括 session、application 和 pageContext
JSP内置对象(作用域通信对象)session 对象
q Web 服务器为单个用户发送的多个请求创建会话
q 存储有关用户会话的所有信息
q javax.servlet.http.HttpSession 接口的实例
q session 对象最常用的方法有:
q void setAttribute(String name,Object value)
q 以键/值的方式,将一个对象的值存放到session 中
q void getAttribute(Stringname)
q 根据名称去获取session中存放对象的值
JSP内置对象(作用域通信对象)Application 对象
q 表示JSP 页面所属的应用程序
q 应用程序的JSP 页面组合起来形成一个应用程序
q javax.servlet.ServletContext接口实例
q application对象最常用的方法有:
q void setAttribute(String name,Object value)
以键/值的方式,将一个对象的值存放到application中
q void getAttribute(String name)
根据名称去获取application中存放对象的值
JSP内置对象(作用域通信对象)pageContext 对象
q 使用户可以访问页面作用域中定义的所有隐式对象
q 它的作用范围是在同一页面
q javax.servlet.jsp.PageContext 类的实例
q pageContext对象最常用的方法有:
voidsetAttribute(String name,Object value)
以键/值的方式,将一个对象的值存放到pageContext中
voidgetAttribute(String name)
根据名称去获取pageContext中存放对象的值
作用域通信对象的使用
Servlet 对象
q JSP 引擎为每个JSP 生成一个 Servlet
q Servlet对象提供了访问Servlet 信息的方法和变量
q Servlet 对象包括
q page
q config
JSP内置对象(Servlet对象)page 对象
q 使用page 对象可以访问Servlet 类的所有变量和方法
q java.lang.Object类的一个实例
JSP内置对象(Servlet对象)config 对象
q 存储在编译JSP 页面的过程中创建的Servlet 的信息
q javax.servlet.ServletConfig 接口的实例
q 提供了检索Servlet 初始化参数的方法
错误对象
JSP内置对象(错误对象)Exception 对象
q exception对象用于处理JSP 页面中的错误
q exception 对象用于访问执行JSP 的过程中引发的异常
q exception 对象是java.lang.Throwable 类的实例
整理:
q JSP隐式对象一般分为输入/输出对象、作用域通信对象、Servlet 对象和错误对象四类
q JSP 中的隐式对象包括page、config、request、response、out、session、application、pageContext 和 exception
q JSP 定义的作用域包括page、request、session 和 application
JavaBean和JSP
q JavaBean 是可重用组件
JSP页面数据库操作
JSP 使用JavaBean
q 标准动作用于:
q 将JavaBean 嵌入JSP 页面 useBean
q 设置和获取JavaBean 的属性 setProperty/getProperty
q 将用户请求转发给其他页面 Forward
q 将其他页面的内容嵌入当前页面 include
q 标准动作可以为空标签及容器标签
q 标准动作中的属性区分大小写
q JSP 中的标准动作使用<jsp>作为前缀
q 范围指定JavaBean 在JSP 页面中的可用性。各种范围
选项如下:
范围 | 描述 |
Page | Bean 只能在使用页面时使用。当加载新页面时,就会将其销毁 |
Request | Bean 在用户对其发出请求时存在 |
Session | Bean 一直存在于会话中,直至其终止或被删除为止 |
Application | Bean 在整个应用程序中均可使用 |
JavaBean中的Get()和Set()方法
JSP 标准动作
useBean动作
创建 JavaBean
在JSP中使用JavaBean
setProperty 动作
getProperty 动作
Forward 动作
q 创建一个JSP 页面
q 用户将被转至此页面
Include 动作
includeFileNeedingAParameter.jsp
整理:
q JavaBean 是可在多个应用程序中重复使用的组件
q JSP 标准动作用于插入文件、Bean 组件以及将用户转至其他网页
q forward 动作用于将用户的请求转发给其他页面
q include 动作用于将一个页面嵌入当前JSP 页面
Servlet和JSP 的使用
JSP 代码其实是嵌套在页面中的JAVA代码,如果把所有的业务逻辑全写在JSP 页面上,一旦JSP 页面有几时个甚至上百个,那么对于维护工作来说,是一个相当复杂的工作。所以,一个好的程序设计应该把页面表现层和业务逻辑层分开来,用JSP 控制页面表现,用servlet控制业务逻辑。两者结合起来,达到层次分明的效果。同时,也增加了程序的可扩展性、维护性等。
练习
使用JSP 做一个有登录、注册功能的web应用。要求:
–把所有已注册人员的信息以文件的形式存放在f:/users 目录下
–登录时需判断用户是否存在,如果不存在,则返回登录页面,并提示
–如果用户存在,则判断密码是否匹配,如果不匹配,返回登录页面,并提示
–用户登录成功,从文件中读取用户信息显示在页面上
动态页面的实现原理
什么是servlet
定义:Servlet是一个JAVA程序,是在服务器端运行以处理客户端请求,并做出响应的程序
Servlet代码
实例一
实例二
servlet 的配置
在web.xml 文件中配置Servlet
servlet对客户端请求的处理
练习
提交注册到servlet,提交后返回一个注册成功的信息给客户端
Servlet的生命周期
生命周期的各个阶段
Servlet的生命周期由Servlet容器(如:Tomcat) 控制
–容器如何处理请求
如果给servlet配置了<load-on -startup>1</load -on -startup> 时,servlet从服务器启动就被实例化,并且由服务器自动调用servlet的init() 方法。Servlet 实例由服务器自动销毁,在销毁实例前服务器会调用servlet的destroy()方法。
如果没有给servlet配置<load-on -startup> ,那么servlet在第一次被访问的时候才被实例化,并且由服务器自动调用init() 方法。servlet 实例一样由服务器自动销毁,销毁前服务器会调用servlet的destroy()方法。
Servlet 下载
利用Servlet 实现文件下载功能
Servlet 上传
利用Servlet 实现文件上传功能
– common-fileupload 是jakarta 项目组开发的一个功能很强大的上传文件组件
Servlet过滤器
什么是过滤器
过滤器的作用
o 在实际开发中,譬如我们可以对客户提交的数据进行重新编码,可以从系统获得配置信息,可以过滤客户提交的某些不合法的词汇,可以验证客户是否已经登录,可以验证客户端浏览器是否支持当前的应用,还可以记录系统的日志文件等等。
过滤器的生命周期
o 和Servlet一样,过滤器的生命周期分为四个阶段。
n 实例化实现了javax.servlet.Filter接口的子类。
n 读取过滤器的初始化函数,调用init()方法。
n 完成对请求或过滤的响应,调用doFilter()方法。
n 销毁过滤器,调用destroy()方法。
过滤器的实例
Servlet监听器
监听器概述
用监听器可以监听Web容器中正在执行的程序,根据发生的事件作出特定的响应。如可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。
开发与部署监听器
o 编写监听器的实现类
o 部署监听器
<listener>
<listener-class>
监听器的实现类
</listener-class>
</listener>
ServletContext监听器
ServletContextListener示例
ServletContextAttributeListener示例
HttpSession监听器
HttpSessionListener示例
HttpSessionAttributeListener示例
HttpSessionBindingListener示例
ServletRequest监听器
ServletRequestListener示例
ServletRequestAttributeListener示例
使用Servlet监听实现统计在线人数
实现思路:
编写一个对Session的监听类,当Session创建时,计数器加一,当Session销毁时,计数顺减一
1、创建Web项目ServletListenerDemo
2、创建一个计数器类:
3、编写监听类:OnlineUserListener,继承自HttpServlet,实现HttpSessionListener
HttpServlet的方法可以全部删除,只保留实现HttpSessionListener的方法。
在sessionCreated方法中,计数器加一。
在sessionDestroyed方法中,计数顺减一。
4、创建invalidate.jsp,在其中编写jsp,销毁会话,实现退出。
session.invalidate();
5、在index.jsp中显示当前会话数,即当前在线人数。
当前在线人数:
<%=OnlineCounter.getOnline()%>
<br />
<a href="invalidate.jsp">退出</a>
6、配置Web.xml:
<listener>
<listener-class>ory.wyq.listener.OnlineUserListener</listener-class>
</listener>
7、启动Tomcat,开启不同会放,可看当前再线人数,点击退出,在线人数减一。
为什么学习JavaEE
1 、使用JSP 技术编写动态网页的时候,遇到了哪些问题?
什么是JavaEE
解决方法:JavaEE 的使用
定义:JavaEE(Java Enterprise Edition) 是一个开发分布式企业级应用的规范和标准
JavaEE 扩展框架
Struts、Hibernate、Spring,它们都是框架
–框架,即F ramework 。其实就是某种应用的半成品,就是一组组件,用来完成自己的系统
–简单说就是使用别人准备好的一切,来实施自己的项目
JavaEE 体系结构
JavaEE分层结构
–表示层------------- HTML页面
–中间层------------- Servlet 等组件
–数据层------------- Database(JDBC、JNDI 等)
JavaEE 体系结构--- 三层体系结构
表示层技术
中间层技术
Servlet、JSP 与JavaBean
JSP
–显示动态内容的服务器网页
JSTL
–辅助JSP 显示动态内容的标准标签库
Servlet
–接收客户请求,并做出响应的Java程序
– Servlet 是中间件技术的重要部分,它控制着其他的组件
JavaBean
– JavaEE 的模型组件(DAO/DTO/EJB等)
中间层框架技术
– Struts框架
– Struts框架主要是扩展了Servlet
数据层技术
JDBC技术
– JDBC(JavaData base Connectivity ):Java 数据库连接
– JDBC用来访问数据库和操作数据库表中数据
数据层框架技术
– Hibernate
系统集成技术
JAX -WS技术
– JAX -WS (Java API for XML Web Services) 是JavaEE 平台的重要组成部分
– JAX -WS 简化了使用 Java 技术开发Web服务的工作
JNDI 技术
– JNDI (Java Naming and Directory Interface:Java 命名和目录接口)是一
组在Java 应用中访问命名和目录服务的API
Spring技术
–系统级框架,各大框架组件的黏合剂!