一、为什么使用JSP
HTML和JSP的区别,就好像我有一块巨大的墙,然后在上面用传统的方式粘贴广告布,今天是张三出1万块钱展示他的成人用品广告,明天是李四花2万块钱展示他的治肾亏广告。。。我每天都得去换广告布???
No,使用电子屏幕就搞定了!
- HTML不能动态展示内容
- HTML不能设置变量
- HTML也不能进行业务逻辑判断
- 不能进行数据循环
可以通过response对象响应浏览器数据的方式,在servlet中通过Java代码控制响应的数据,达到动态展示的效果,但是需要以一个完整页面的方式展示,但是代码量大
JSP(Java server pages),运行在服务器中的动态页面,通过Java代码展示数据
二、jsp的组成部分
1、HTML标签和文本
**解析方式:**通过out.write()响应
2、jsp脚本片段:
格式:<% Java代码 %>
**作用:**执行一段Java代码
解析方式:_直接在jsp所翻译成的servlet的_jspService()执行
3、jsp表达式:
格式:<%=数据%>
**作用:**将数据输出到页面
**解析方式:**通过out.print()响应到浏览器中
4、jsp声明
格式:<%! 格式; %>
**作用:**在jsp所翻译成的servlet中声明一个成员变量
**解析方式:**在jsp所翻译成的servlet中声明一个成员变量
三、jsp原理
jsp本质就是一个servlet
jsp就藏在tomcat的work目录中,jsp文件所翻译成的Java类和生成的class,是一个servlet的远房表亲,继承了HttpJspBase,而HttpJspBase继承了HttpServlet
jsp所翻译成的类就是一个servlet在jsp所翻译成的servlet的_jsService()中,将HTML代码通过out.write()响应到浏览器,将jsp脚本片段中的代码直接在_jspService()中执行,jsp中表达式中的额内容会通过out.print()响应到浏览器,jsp声明会在jsp所翻译成的servlet中直接声明相应的成员变量
四、jsp的四大域对象
域对象中操作数据库的方法
void setAttribute(String attributeName,Object attributeValue)://设置在域对象中共享的数据
Objcet getAttribute(String attributeName);//获取域对象中共享的数据
void removeAttribute(String attributeName);//删除域对象中共享的数据
1、pageContext
**类型:**PageContext
功能:
- 获取其他八个隐式对象
- 域对象,可以在一个一面范围内共享数据
使用场景:
- jsp中大部分的标签都会默认将数据共享在pageContext中
2、request
**类型:**HttpServletRequest
功能:
- 获取请求参数
- 转发
- 域对象,可以在一次请求范围中共享数据
应用场景:
- 错误信息提示
- 查询所有数据展示在页面中
- 数据回显
3、session
**类型:**HttpSession
功能:
- 域对象,可以在一次会话范围中共享数据(一次会话指的是浏览器从开启到关闭)
应用场景:
- 记录用户的登录状态
- 购物车
4、application
**类型:**ServletContext
功能:
- 获取当前工程的初始化参数
- 获取当前工程的上下文路径
- 获取当前工程的部署路径
- 域对象,整个工程的范围中共享数据
应用场景:
spring会将IOC容器对象所共享在ServletContext中
下面,我们来观察域对象中的范围:
首先创建两个页面,在这两个页面中写入四大域对象中需要共享的数据,然后做以下对照试验
<%--index页面
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>这是index.jsp页面,设置共享数据