JAVA-WEB-JSP
JSP
1 JSP概述
- JSP看起来像一个HTML,但和HTML不同的是,JSP中可以书写Java代码,可以通过Java代码展示动态的数据
- JSP的出现即解决了Servlet不适合输出页面的问题,也解决了HTML无法展示动态数据的问题
2 JSP执行过程
- 当浏览器请求服务器中的某一个JSP文件(例如:localhost:8080/day11-jsp/test.jsp),服务器会根据请求资源的路径去寻找该文件:
- 如果找到了,JSP翻译引擎会将JSP翻译成一个Servlet程序(JSP----> xxx.java----> xxx.class),然后Servlet程序再执行,执行的结果是向浏览器输出一个HTML网页!
- 如果没有找到,服务器将会响应一个404页面,通知浏览器请求的资源不存在
3 JSP隐含对象
隐含对象可以在jsp中直接拿来使用,不必再去声明
- request
- response
- pageContext
- session
- application:ServletContext的对象,代表当前Web应用
- config:当前JSP对应的Servlet的ServletConfig对象
- out:JspWriter的对象,常调用out.println()可以把字符串打印到浏览器上
- page:指向当前JSP对应的Servlet对象的应用,但是是Object类型,只能调用Object类的方法
- exception:用于报错JSP页面
4 JavaWeb四大域对象
Servlet中只有ServletContext、ServletRequest、HttpSession三个域对象,JSP中多了一个pageContext对象。
4.1 application
- 生命周期
当web应用被加进容器时,创建代表整个web应用的ServletContext对象,当服务器关闭,或web应用被移除时,ServletContext对象跟着被销毁 - 作用范围
整个web应用 - 应用
多个Servlet通过ServletContext对象实现数据共享
4.2 request
- 生命周期
在service方法调用前由服务器创建,传入service()方法,整个请求结束,ServletRequest生命周期结束。 - 作用范围
整个请求链 - 应用
在整个请求链中共享数据
4.3 session
1.生命周期
第一次调用request.getSession()方法时,会创建一个session对象。
- 超时销毁:默认情况下,当超过30分钟没有访问session,session就会超时销毁。(30分钟是默认时间,可以修改,但不推荐修改)
- 自杀:调用session的invalidate方法时,会立即销毁session。
- 意外身亡:当服务器非正常关闭时(硬件损坏,断电,内存溢出等导致服务器非正常关闭),session会随着服务器的关闭而销毁;
- 作用范围
在一次会话 - 应用
因此session中适合存储对安全性要求较高,但不需要长时间保存的数据,保存登录状态、保存验证码
4.4 pageContext
- 生命周期
当对JSP的请求开始时创建,当响应结束时销毁 - 作用范围
整个JSP页面,是四大域中最小的一个 - 应用
封装了8大隐式对象,通过它可以获得其它的8个对象
5 JSP和Servlet是什么关系?
- Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容
- JSP本质上是Servlet的一种简易形式,JSP翻译引擎会将JSP翻译成一个Servlet程序,可以简化页面内容的生成。
- Servlet和JSP最主要的不同点
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然这个说法是很片面且不够准确的。JSP侧重于视图,Servlet更侧重于控制逻辑。
6 动态include和静态include的区别
- 静态include:语法:<%@ include file=“文件名” %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。
- 动态include:语法:<jsp:include page=“文件名”>,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新