JSP知识点总结
1.什么是JSP
JSP (Java Server Pages),是在Servlet基础上开发的一款技术,运行在服务器端的语言,也是一种用于开发动态网页的技术,主要用来界面显示。
2.什么是Servlet
Servlet是一种独立于平台和协议的服务器端的java技术,可以用来生成动态的web页面,主要用于处理业务逻辑。
3.JSP和Servelt的异同点
相同:都是运行在服务器端的动态页面技术。
不同:1.编程方式不同:
servlet中是java代码中嵌入HTML等多种前端语言,
JSP中是HTML等前端语言嵌入Java代码;
2.Servlet必须在编译后才能运行, JSP支持预编译,只会编译一次,并将结果内容保存,如果JSP内容不更改,则下次访问会大大提高访问速度;
3.运行速度不同:
JSP–>Servlet–>.class
很明显JSP要比servlet多一步先转换为Servlet,所以速度较慢
4.JSP技术特征
a.跨平台:Jsp是以java为基础开发的,所以JSP同样具有跨平台性
b.分离静态内容和动态内容:
c.可重复使用的组件:JavaBean
d.沿用了Java Servlet的所有功能:Jsp是先转换为Servlet
e.预编译:只会编译一次
5.JSP的处理过程
需要注意的是:整个交互过程中:服务器负责加载,转化,翻译,执行,发挥响应。
单纯的JSP页面编程弊端越来越严重,大部分的java代码与HTML代码混合在一起,给程序的维护和调试带了了很大困难,于是就经历了以下的web开发历程,
引用于《JSP程序设计》慕课版
6.JSP+JavaBean模式
该模式虽然已将java代码进行了分离,但该模式下JSP不但要进行程序中大部分的流程控制,而且还要负责页面的显示,仍然不是很理想。
7.JSP+Servlet+JavaBean模式
MVC模式这里简单说明,M(model)对应(JavaBean),V(View)对应(JSP),C(controller)对应(Servlet)。
8.JSP开发环境搭建
- web浏览器 :客户端用于发送请求,访问web应用的工具
- web服务器:服务器是运行和发布web应用的容器
- JDK:服务器的版本需要和JDK版本相对应,
- 数据库:数据库一般使用mysql和sql server
9.JSP的基本组成
①.JSP中的指令标识:。利用JSP指令可以使服务器按照指令的设置来执行动作和设置在整个JSP页面范围内有效的属性
a.page指令 :页面指令,定义在整个JSP页面范围内有效的属性。page指令的位置可以放在jsp页面的任意行,为了增强可读性,规范是放在文件的开头。<%@ page attribute1=“value1” attribute2="value2"%>
attribute主要有:
language: 限定脚本语言,可以是java,php等等
contentType:设置页面响应的MIME类型,(多用途互联网邮件扩展)是当前一种电子邮件的技术规范,MIME的常见形式是一个主类型+一个子类型,用斜杠分隔,比如:text/html,application/javascript,image/png....
import:类似于java中的import语句,用来向JSP文件中导入所要用到的包,**是唯一一个可以出现多次的指令**同时导入多个包中间用 “”,“”隔开。 errorPage=”error.jsp” --->出错的界面
IsErrorPage=”true” ----->真正的error.JSP,当前页面可以使用Exception异常对象
pageEncoding:该属性用来设置页面的字符集编码。
session:属性值为boolean,表示支持或不支持session。
b.include指令: 在当前使用该指令的位置倩如其他文件
<%@ include file="文件的绝对路径或相对路径"%>
file属性:该属性不支持任何表达式,只能是写死的路径,也不允许通过如下方法传递参数。
<%@ include file="welcome.jsp?name=jc"%> 这种写法是错误的。
c.taglib指令:可以直接使用JSP提供的一些动作元素标识完成特定功能。
jstl下来自己了解一下
。
②.HTML标记语言 :在JSP页面中作为静态的内容,浏览器将会识别这些HTML标记并执行。在JSP程序开发中,这些HTML标记语言主要负责页面的布局、设计和美观,可以说是网页的框架。
a.htnl中的注释:<!--纯文字 -->
这种注释在客户端浏览器是看不到的,可以通过源码(F12)查看
b.带有jsp表达式的注释:
<% String name="jc"%>
<!--当前用户:<%=name%>-->
欢迎登录:<%=name%>
返回页面的结果是:欢迎登录:jc
通过源码查看的结果是:
<!--当前用户:jc-->
欢迎登录:jc
说明:服务器能识别注释中的jsp表达式,并且能够执行但不会显示在页面。
③.嵌入的Java代码段 : 在服务器端执行的语句,需要将java代码嵌入到特定的格式内
语法1: 声明标识:<%! 全局变量或全局方法%>
注意: <%和!之间不可以有空格,声明语句末尾一定有分号。
语法2: 脚本标识:<%java代码片段%>
注释: 同java中注释一样,有 单行(//)、多行(/* */)、文档注释(/ ** */)
④JSP表达式 JSP表达式主要用于数据的输出。它可以向页面输出内容以显示给用户,还可以用来动态地指定HTML标记中属性的值。
语法:<%=变量或可以返回值的方法或java表达式 %>
注意:<%和=之间不可以有空格;表达式末尾没有分号。
10.JSP隐藏注释
语法:<%-- --%>
安全性较之前的注释要高,不仅在客户浏览器看不到,而且即使通过源码也不会看到。
11.动作标识: 在请求处理阶段按照在页面中出现的顺序被执行的,只有他们被执行的时候才会去实现自己所具有的的功能。
a.< jsp:include >: 用于对当前页面中包含的其他文件,这个文件可以是动态文件也可以是静态文件。
动作标识include和指令标识include的区别:
指令标识 include | 动作标识include |
---|---|
<%@ include file=”写死的路径,不可以是表达式”%> | <jsp:include page=”可以是表达式,也可以是写死的路径”> |
只能引入静态文件 | 既可以引入静态文件(.txt,.html),也可以引入 动态文件(.jsp,.asp) |
先包含,再编译,最后生成一个文件 | 先编译,再包含,最后生成的是多个文件 |
速度快 | 速度慢 |
对包含文件有编码约定 | 无需遵循编码约束 |
不可以携带参数 | 内嵌子标识< jsp:param >实现参数传递 |
b. < jsp:forward >: 用来请求转发到另一个JSP,html或相关资源的文件中,但必须是内部的资源,即当前应用中的资源。
语法:
<jsp:forward page="http://localhost:8080/web/login.jsp"/>
转发与重定向的区别
c.< jsp:useBean > 可以再JSP页面创建一个Bean实例,并且通过属性的设置可以将该实例保存到JSP中的指定范围
该作用和指令标识<%@ page import=" "%>作用一样,唯一不同的是< jsp:useBean >引入类的同时会实例化一个对象。
语法:
<jsp:useBean id="变量名/实例名" class="JavaBean的类路径"
scope=“”page|request|session|application“(四大作用域)” / >
d.< jsp:setProperty > 该标识通常和< jsp:useBean>标识一起使用,将Bean中的sexXXX()方法将请求中的参数赋值给由< jsp:useBean>标识创建的JavaBean中对应的简单属性。
语法:
<jsp:setProperty name="Bean实例名" property="*"
注意:代表request请求中的所有参数的值将被一一赋给Bean中与参数具有相同名字的属性。
e.< jsp:getProperty > 属性用来从指定的Bean中读取指定的属性值,并输出到页面中,前提是该JavaBean必须具有getXXX()的方法。
f. < jsp:param > 通常是作为子标识嵌套使用,用来传递参数。
12.JSP内置对象
request对象
request对象是从客户端向服务器发出请求,
包括用户提交的信息以及客户端的一些信息。
request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。
String param=Request.getparameter(); 获取用户提交的表单数据
Request.setCharacterEncoding(“utf-8”); 设置服务器获取页面的编码格式
Request.setAttribute(“key”,object); 在作用域中管理属性
Request.getCookies(); 获取cookie,返回一个数组、
request访问客户信息
response对象
响应客户请求,向客户端输出信息。
response.sendRedirect("next.jsp"); //重定向页面
resopnse.sendError(int number,[String mesg]); //指定状态码 [描述性信息发给客户]
response.setHeader(“Cache-Control”,”no-store”); // 设置HTTP响应报头,禁止缓存。
response.flushBuffer(); //强制把缓冲区中内容发给客户
session对象
session指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。如果举一个局限的例子:request是发出到服务器,response是发回给浏览器,那么session就是有来有回。
//setAttribute()用于设置指定名称的属性值,并将其存储到session对象中。
session.setAttribute(String name,String value); //第二个参数value的类型是object
session.removeAttr(String name); //从绘画中删除指定的对象。
session.invalidate(); //销毁session
session.setMaxInactiveInterval(int intereval); //会话的超时管理,单位是秒
session的默认生命周期是30min,也叫做发呆时间。
session和cookie的练习与区别
session | cookie |
---|---|
发生在服务器 | 发生在浏览器 |
session默认30min过期 | cookie如果不手动删除,永远保存 |
可以存储任何类型数据 | 只能存储字符串类型 |
session是否能和用户建立起一一对应的关系依赖于用户端是否支持Cookie,两者之间通过sessionID进行联通,如果用户端不支持Cookie,那么服务器将无法将id存放在用户端的cookie中,就无法通过这种方法建立一一对应的联系;但可以通过URL重写,就是当用户的一个页面重现连接到另一个页面时,通过向这个新的URL中添加参数,把session对象的id传带过去,这样就可以保证用户在该网站的各个页面中session对象是完全相同的。可以用
response.encodeRUL()或response.encodeRedirectURL()实现重写
application对象
application对象用于保存所有应用中的公有数据,他的生命周期伴随着服务器的启动,直到服务器关闭application才会消失。
application.getInitParameter(String name ); //访问应用程序初始化参数
application.setAttribute(String name, Object obj); //管理应用程序环境属性
application对象和session对象的区别
session对象和用户会话相关,不同用户的session是完全不同的对象;
application对象都是相同的一个对象,即所有用户共享这个对象。
out对象
主要用来向客户端输出各种数据类型的内容
<%= out.print("这是out内置对象")%>
13.JavaBean
JavaBean就是一个实体类,别想太复杂了,用来存储数据的类。
JavaBean的技术特点:
- 一次性编写
- 任何地方执行
- 任何地方复用
JavaBean的分类
- 不可视化javabean
- 值javaBean
- 工具javaBean
- 可视化javaBean
JavaBean的规范
- 实现 java.io.Serializable接口
- 是一个公共类
- 类中必须存在一个无参构造函数
- 提供相对应的setXXX()和getXXX()方法存取类中属性。