JSP:
什么是JSP:Java Server Pages (Java服务器端页面.)
为什么出现JSP:拟补Servlet自身的缺陷.
JSP = HTML + Java + 自身的指令 标签...`
JSP的执行原理:
JSP也会被翻译成Servlet 解析执行.
JSP的运行脚本:
<%! %> :定义 变量 方法 和 类. 翻译成全局变量、全局方法、内部类. 很少使用.
<%= %> :表达式.不需要写; 翻译成out.println( );中的内容.
<% %> :定义 变量 不能定义方法. 翻译成service方法内部的代码.
下面的JSP的代码,在JSP中运行会输出( C )
<%=x %>
<% x=5; %>
<% int x = 10; %>
<% this.x = 20; %>
<%=x %>
<%! int x = 0; %>
A.编译错误 B.10 0 C.0 10 D.0 20
<%! int x = 0; %> ---- 定义一个全局变量x = 0; 优先翻译.
<%=x %> ---- 输出x 全局变量x 输出0
<% x=5; %> ---- 将全局变量赋值为 x = 5;
<% int x = 10; %> ---- 定义局部变量 x = 10;
<% this.x = 20; %> ---- 全局变量x的值修改为了20;
<%=x %> ---- 输出x是局部变量
JSP的注释:
支持HTML语法:
* HTML的注释: <!-- 注释 -->
支持Java代码 :
* Java的注释:
// 单行注释
/* */ 多行注释
/** */ 文档注释
本身JSP注释:
* JSP注释:
<%-- JSP注释 --%>
注释的区别:
JSP注释: 只会存在于源代码阶段(JSP阶段).翻译成Servlet执行的时候 注释消失了.
Java注释: 会存在于源代码及Servlet代码接到 当由Servlet生成HTML输出的时候 注释消失了.
HTML注释: 会存在源代码 及 Servlet的代码 及 生成的HTML页面 都会存在.
JSP的指令:JSP指令用于提供整个JSP页面的相关信息以及用于JSP页面与容器之间的通信。
指令:page include taglib.
语法:<%@ 指令名称 属性名称="属性值" %>
page指令:
language: 用于指定在JSP页面中可以使用的语言.目前来讲只能是java.
extends: 用于指定JSP最终翻译成Servlet 继承的类.
* 默认继承:org.apache.jasper.runtime.HttpJspBase 可以修改 但是这个类必须是Servlet
session: 用于指定JSP是否可以在页面中直接使用session对象.
* session默认为true在页面中默认可以直接使用session对象
生成的servlet中 可以看到有一下两句:
HttpSession session = null;
session = pageContext.getSession();
* session值改为false 在页面中不能直接使用session.
import: 用于指定JSP中 导入的Java类的包.(import属性 在page指令中 可以出现多次的.)
* 默认导入的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
buffer和autoFlush: buffer用于指定JSP向页面输出的时候缓冲区的大小.默认 8kb.
autoFlush:用于指定超出缓冲区 默认是true 正常输出 如果值改为了false 出现异常
errorPage和isErrorPage:errorPage:用于指定JSP页面出错了.转向到一个错误提示页面.
isErrorPage:在错误页面中 查看错误信息. 默认值是false 将其值改为true.将在代码中生成以下代码:
Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
在页面中可以直接使用exception对象.
企业中配置全局错误页面:(*****)
在项目的web.xml中
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
contentType和pageEncoding:contentType:用于指定JSP 浏览器默认采用的编码.
pageEncoding:文件保存的时候 文件被翻译成Servlet的时候采用的字符集编码
isELIgnored:用于指定JSP页面是否忽略EL表达式. 默认:false 默认不忽略.
如果将该值改为true 。 不能在页面中使用EL了.
重点:import contentType和pageEncoding
include指令:用于页面的包含.(静态包含.)
<%@ include file=""%>
file:被包含的页面的路径.
在包含的时候 被包含的页面 不需要写html的结构.
file:代表是被包含页面的路径
* file的值不能是变量.
* file的值不能传递参数.
原理:
相当于代码的拷贝.最后翻译成一个servlet 由该Servlet执行.
taglib指令: 用于页面引入标签库. 标签库 主要用于替换页面中<%%>
<%@ taglib uri="" prefix=""%>
uri:标签库路径.
prefix:标签库的小名.
JSP的三大指令:page include taglib.
(*****)JSP的内置对象:(面试:JSP中内置对象有哪些?常用方法有什么?对象代表的含义?)
内置对象:在JSP中直接可以使用的对象.
九个内置对象:
pageContext、request、response、session、application、out、page、exception、config
request:HttpServletRequest 代表客户的请求
response:HttpServletResponse 代表服务器的响应
session:HttpSession 代表一次回话
application:ServletContext 针对一个web项目、服务器的一个对象
exception:Throwable 异常信息
config:ServletConfig 获得Servlet配置信息 getInitParameter(); getServletName();
page:Object 代表jsp翻译成Servlet类的对象
pageContext:PageContext 代表一个域对象,只能在当前页面使用
out:jspWrite 输出对象
***** out对象 和 response.getWriter(); 是不是一个对象?
肯定不是.out是JspWriter 而response.getWriter()获得PrintWriter.
JSP的四个作用范围:
pageContext:page范围.
request:请求范围.
session:会话范围.
application:应用范围.
***** page指令 page对象 page范围.
JSP的标签:(JSP的动作) JSP Action
语法:
<jsp:forward> :转发.
<jsp:include> :包含.(动态包含)
* 动态包含 和 静态包含的区别?
动态包含:包含运行结果、编译多次
静态包含:相当于直接代码拷贝、编译一次
<jsp:param> :传递参数. (一般不用.)
以下3个标签与JavaBean有关.
<jsp:useBean> :
<jsp:setProperty>
<jsp:getProperty>
什么叫做JavaBean: 作用封装数据. JavaBean:就是一个满足了某种特定格式的Java类.
格式:
这个Java类必须具有一个无参的构造函数
属性必须私有化。
私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
setXxxx getXxxx
JavaBean的属性:
* JavaBean的属性是由谁决定的? 由get 或 set方法决定.
<jsp:useBean>
id:对当前类 取的唯一标识 .
class:JavaBean类的全路径 。
scope:page request session application 创建一个对象 对象放在某个域中.
<jsp:useBean id="p" class="cn.itcast.bean.Person" scope="page"></jsp:useBean> 翻译后 生成以下的代码.
cn.itcast.bean.Person p = null;
synchronized (_jspx_page_context) {
p = (cn.itcast.bean.Person) _jspx_page_context.getAttribute("p", PageContext.PAGE_SCOPE);
if (p == null){
p = new cn.itcast.bean.Person();
_jspx_page_context.setAttribute("p", p, PageContext.PAGE_SCOPE);
}
}
<jsp:setProperty property="id" name="p"/>
<jsp:setProperty property="name" name="p"/>
<jsp:setProperty property="sex" name="p"/>
简写:
<jsp:setProperty property="*" name="p"/>
前提:表单中的name的值 于 JavaBean的setXxx满足一致.
内省:获得JavaBean的属性.及对应属性的读和写的方法.(了解.)
没有反射底层.
java.beans.Introspector
* static BeanInfo getBeanInfo(Class<?> beanClass) --- 获得类的信息.
java.beans.BeanInfo
* PropertyDescriptor[] getPropertyDescriptors() --- 获得类的属性描述.
java.beans.PropertyDescriptor
* String getName();
* Method getReadMethod()
* Method getWriteMethod()
BeanUtils:Apache下的一个开源免费的类库. *****会用.
完成JavaBean的封装.
核心类:
BeanUtils
static void populate(Object bean, Map properties)
ConvertUtils
static void register(Converter converter, Class clazz)
EL:结合JSTL的标签库 替换 页面中的<%%>
语法:${ EL表达式. }
* 获得域对象值.
* 传统方式取值.
<%=pageContext.getAttribute("name") %>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>
* 使用EL取值
${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }
* EL的简写
${name} :默认从小的范围中找name的值 有没有.
EL比传统方式好:如果名称写错了 EL 返回一个 "" 空的字符串 而 传统方式 返回null.
* 获得域对象中存的数组的值.
${ 数组名称[下标] }
* 获得域对象的List集合的值 .
${ list名称[下标]}
* 获得域对象的Map集合的值 .
${ map的名称.key }
* 获得域对象的对象属性的值 .
${ 对象名称.属性名}
[] 和 . 索引值 使用[] . 一般是带有属性.(对象中的属性.)
如果map集合的key中有特殊符号 不能使用. 必须是用[] 如 ${ map["ddd.eee"] }
* 执行运算.
算数运算:
${ n1 + n2 }
逻辑运行:
关系运算:
* 操作web开发常用的对象.
11个.
param :相当于request.getParameter();
paramValues :相当于request.getParameterValues();
* 这两个用来接收参数的.
header :获得请求的头信息 request.getHeader("");
headerValues :获得一个key对应多个value的情况.
* 这两个用来获得请求的头信息.
cookie :获得Cookie的信息.
* 之前获取Cookie request.getCookies(); 返回一个Cookie的数组.在数组中查找指定名称的Cookie.
${ cookie.history.value } // 获得了名称是history的Cookie的value的值.
initParam :获得全局初始化参数.
pageContext :就是PageContext内置对象.
* 调用Java的方法
总结:
JSP的脚本
可以写入java代码<% %> <%! %> <%= %>
JSP的注释
jsp注释:<%-- --%>:只存在就jsp中
java注释:<%// /* */ /** */>%:能存到编译后的servlet中,倒也html页面上就没了
html注释:<!-- -->:一直都会存在
JSP的指令
<%@ 指令名称 %>
三大指令:page include taglib
JSP的内置对象
九大内置对象:pageContext request response session application out exception page config
JSP的动作标签
<jsp:标签 >
forward
include
param
userBean
setProperty
getProperty
**** 动态包含与静态包含
静态包含代码 动态包含结果
JSP的四个作用范围
pageContext
request
session
application
JavaBean:java类
BeanUtils
1.导包
2.自定义类型转换器
3.BeanUtils.populate(Object obj, Map map);
EL表达式:
获取值
获取四个域对象的值
**** 获取域对象村的值 数组List Map
执行运算
*算术运算
*关系运算
*逻辑运算
*三元运算
EL中操作web常用的对象
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
headerValues
cookie
initParam
pageContext
javaWeb_JSP,EL及JSTL的使用
最新推荐文章于 2022-09-07 15:08:58 发布