Jsp_Cookie_HttpSession_EL

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相关的内容

  • 业务层 业务对象

  • 数据层 操作数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值