Jsp&Cookie&HttpSession&EL
1.Jsp基础
1. 作用:
在原有html基础上面添加java脚本,构成jsp页面
2.Servlet:
虽然能够动态,但是在页面的时候需要调用函数输出在页面上面
3. Html:
虽然能够很好的显示在网页上面,但是不能够动态的现实内容
4. Jsp和servlet的分工:
Jsp:请求发起页面,表单,超链接,请求结束页面,现实数据(服务员)
Servlet:请求中间处理数据(厨师)
5.Jsp组成:
Jsp=html+java脚本+jsp标签
Jsp无需创建即可使用的对象(request,response)
6.三种java脚本
<%….%>java代码片段,方法内可以放什么就可以放什么(不能放方法和成员变量)
<%=…%>主要用来输出,用于输出一条语句的表达式,system.out.printf(这里面的内容)
<%!…%>声明,变量,方法
7.Jsp原理:
其实就是java代码
8.Jsp注释:
2.Cookie(域)
1.定义:
浏览器保存服务器的数据,第二次访问相同的页面时,浏览器将保存的数据发送到服务器
2.举例
Set-Cookie aaa=AAA
response.addHeader(“Set-Cookie”,”aaa=AAA”);
Cookie cookie= new Cookie(name,value);
快捷方式serponse.addCookie(cookie)//向客户端发送cookie
request.getCookies()//服务器获取从浏览器保存的cookie,返回Cookies数组
coookie.setMaxAge():设置cookied的生命周期-1表示直接”杀死“0表示在浏览结束清楚
访问的路径要是包含了cookie的路径,那么服务器就会取得到留在浏览器的cookie值
3.HttpSession(域)**保护用户的登录信息
Jsp中的内置对象
服务器端对象,保存在服务器中,属于javaWab不是属于Html
调用HttpSession session = request.getSeccion();打开浏览器到关闭浏览器(一个用户)
Resquest.getSession(false):不存在session那么就会返回null
Session案例:(简单登陆页面)
Session原理:
和银行卡一样的,访问一次就会得到一张卡,卡里面存数据,关闭网页的时候就流失了这张卡,所以要重新分配这个卡
4.Jsp三大指令
1.Page指令:<%@page %>
pageEncoding和contentType
1. pageEncoding:指定当前的页面编码,只要是正确的,就不会乱码。服务器编译jsp成的java的时候会使用pageEncoding;
2.contentType contentType(“type/html;charset=utf-8”)都是设置jsp页面的编码。
* Import :导包
- ErrorPage:当前页面如果抛出异常,转发到哪一个页面
* isErrorPage:指定当前页面是否为处理错误的页面,当属性为true时,可以使用内置对象的exception
<error-page>
<exception-type></exception-type>
<location></location>将错误页面转发到新的页面
</error-page>
Buffer:指定为缓冲区的大小,通常为8k
isELIgnored:是否忽略el表达式(默认为false)
2.Include静态包含
RequesetDispatcher的include方法相似
将两个jsp页面绑在一起了,但是requestDispatcher是将两个需要的内容共享。
5.九大内置对象
Out:输出
Config:对应ServletConfig(配置)
Page:当前jsp的this,就是当前的对象。引用为Object类型
pageContext:最后一个域对象
Exception:异常类的对象
request
Response
Application:ServletContext类的对象
Session:
6.pageContext(域对象)
四大域对象
1.servletContext(域):整个应用程序
2.Session(域):整个会话
3.Request(域):一个请求链
4.pageContext:一个jsp页面,当前jsp页面和jsp标签之间共享数据。
代理其他域:pageContext.setAttribute(“”,””,PageContext.Seesion_SCope);代理session对象
全域查找:pageContext.findAteeibute(“”):从小范围查找到大域,page的域最小
可以通过get方法,获取其他八个内置对象
7.jsp动作标签
动作标签是有服务器来执行,html是由浏览器执行
:转发
:包含
:用来作为forward和include的子标签。
<jsp:param value=””,name=””>
被转发或者被包含的jsp的页面中就可以调用这些内容
8.jsp在xml中的配置
在context.xml的<Context reloadable=”true”>
;自动重新加载,不用重启tomcat
在wab.xml中已经将jsp的xml文件已经写好了
9.javaBean
必须为成员变量设置set,get方法(其一也是可以的)
方法名称满足一定规范,就是可以称之为属性
- pageContext:这个是一个pageContext类型
项目名:${pageContext.request.contextPath}
项目名称变为这样
EL自带函数库
导入自带的函数库:<@taglib prefix=”fn” url=”/functions”>
EL自定义函数库:
新建一个java类,private 并且都含有返回值
要写tld文件,写在WEB-F下
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSTL 1.1 functions library</description>//文件的名称
<display-name>JSTL functions</display-name>
<tlib-version>1.1</tlib-version>//版本号码
<short-name>fn</short-name>//前缀
<uri>http://java.sun.com/jsp/jstl/functions</uri>//现在用不上
<function>
<description>
Tests if an input string contains the specified substring.
</description>
<name>contains</name>/函数名称
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>//函数的位置,和在xml中配置servlet一样的
<function-signature>boolean contains(java.lang.String,java.lang.String)</function-signature>//返回值
</function>
</taglib>
10.EL标签
EL是jsp内置的表达式$<”name”>可以全域查找也可以指定域查找
EL只能输出代替<%= %>标签
EL读取四大域
${xxx},全域查找名为xxx的属性,不存在返回空字符串
${pageScope.xxx}
${sessionScope.xxx}
${requestScope.xxx}
${applicatScope.xxx}输出指定域的属性
- El可以直接输出内置的十一个内置对象
其中十个是map对象
Map.key可以获得键的值
Param:map对象,键值对,键key,值是value
paramValues:map对象,键值对,值是多个。下表
Header:对应请求头,key头名称,value是单个值
headerValues:请求头,对象多值
Cookie:Map
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSTL 1.1 functions library</description>//文件的名称
<display-name>JSTL functions</display-name>
<tlib-version>1.1</tlib-version>//版本号码
<short-name>fn</short-name>//前缀
<uri>http://java.sun.com/jsp/jstl/functions</uri>//现在用不上
<function>
<description>
Tests if an input string contains the specified substring.
</description>
<name>contains</name>/函数名称
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>//函数的位置,和在xml中配置servlet一样的
<function-signature>boolean contains(java.lang.String,java.lang.String)</function-signature>//返回值
</function>
</taglib>
11.Jspl
Jspl包含四大标签库:
导入jspl标签库(动态标签是在服务器中执行)
<%@taglib prefix=”前缀” url=””%>
1. 核心标签库:Core
Out
<c:out value=”” escapeXml=”true”/转移”<>“>
可以输出${}中的内容
Set
创建域的属性
<c:set var=””,value=”” scope=”设置在指定域”>
默认设置的是在page中
Var:变量名 value:变量值,scope=”设置在指定域”
Remove
<remove>
:删除域变量
Var:变量名 scope:删除指定域的内容,否咋就删除了所有域中的内容
Url
Value:指定一个路径,会直接在给定的值前面加上项目名
<c:param name=””,value=””>
输出为项目名/a.jsp?名称的URL编码,子标签
If
<c:if text=””></c:if>
必须要有一个bool类型的值,当text为真得时候执行标签体类容
Choose
对应java中的if else
<c:choose>
<c:when text=””></c:when> if
<c:whentext=””></c:when>只有当第一个为假的之后才会执行这个
<c:otherwise></c:otherwise>
</c:choose>
forEach
循环遍历数组集合,技术方式来循环
<c:forEach var=”i” begin=”1” end=”10” step=””>从一到十 包含十
</c:forEach>
<c:forEach items=”” var=””>
</c:forEach>
循环变量
Fmt
格式化输出库
自定义标签
1. 自定义一个类
2. 写一个tld文件,相当于xml文件
3. 在jsp中调用tld文件
标签处理类:
SimpleTag接口
Void doTag():每次执行都会调用这个方法
Void setParent(JspTag):设置父标签(不是生命周期方法)
JspTag getParent():返回父标签
**Void setJspBody(JspFragment):设置标签体
**Void setJspContext(JspContext):设置jsp上下文对象
doTag()这个方法最后使用
创建tld文件
<tag>
<name></name><!-- 标签名称 -->
<tag-class></tag-class><!--标签处理类,加包名称 -->
<body-content>empty</body-content><!--标签内容 empty空标签 -->
</tag>
标签内容:
scriptless:只能是el表达式,也可以是其他的标签
this.getJspContext().getOut()获得输出流
this.getJspBody().invoke(‘输出流’)//执行标签体
this.getJspBody.invoke(null)//执行标签体
在页面中调用这个tld文件
<@%taglib prefix=”短名称” url=”标签所在的位置路径”%>
<”短名称”,在tld定义的名称>
Throw new SkippageException抛出这个异常之后,本jsp页面下面的内容不再显示
标签属性:
在标签处理类里面添加属性
设置boolean text的属性,设置get,set方法,也是在doTag之前,值是有tomcat传入
If(text){this.getJspBody.invoke(null)}执行标签体
在tld中添加属性
<body-content>scriptless</body-content>
<attribute>
<name>:属性名称</name>
<required>true</requirde>//指定属性是否为必须的
<rtexprvalue>true</rtexprvalue>//能否使用EL语句
</attribute>
12.Mvc
M–model 模型(自己写的代码) 统一调度
V-view 视图(jsp) 显示
C-Controller 控制器(servlet) 处理
javaWab三层框架
Wab层 与wab相关的内容
业务层 业务对象
数据层 操作数据库