java之JSP的学习

jsp:全称Java Server Pages,jsp的本质其实就是一个servlet类,只不过servlet类中主要是用来编写java逻辑代码的,而jsp中主要是用来展示界面的,适合编写输出动态内容的

Jsp编译执行的过程原理:
1.当浏览器访问jsp的时候,jsp页面会被翻译成.java文件
2.然后.java文件会被编译成.class文件
3.虚拟机会将.class文件编译成系统能够识别的指令
Jsp中的一些常用的语法:
1.小脚本:<% java代码 %>:小脚本中可以写java代码,在小脚本中的java代码会被编译到jsp底层的service方法中
2.表达式:<%= java代码%>:表达式相当于out.print();可以直接写在jsp文件中的,会直接输出表达式中的java代码运行的结果,直接输出到页面上
3.声明: <%! number1 %>:相当于在jsp的底层servlet实现类中,声明了一个全局变量
4.注释:<%– –%>:jsp中的注释形式相比较html中的注释<– –>来说,比较安全且比较省资源,因为html的注释被编译成java代码的时候也是会被编译到service方法中的

jsp中的常用的指令标签:
1.page:page是比较常用到的指令,
例如:当需要导入文件路径:<%@ page import=”java.util.List” %>
当页面出现错误的时候,我们设置跳转到指定的一个页面的时候: <%@ page errorPage = “路径”%>
设置页面的编码格式:<%@page contentType = “text/html;charset=utf8”%>
2.include:include指令是当要进行请求包含设置的时候才会用到的,将其它页面中的service方法中的内容包含到本页面中的service方法中,通过指令设置的包含请求是静态请求:也就是说 将service方法包含到本页面中这个操作是在将jsp页面翻译成.java文件之前执行的,所以整个过程只会产生一个.java文件.
3.taglib: taglib指令是用来导入jar包的,当我们在lib文件中引入了第三方jar包的时候,我们需要将jar包的路径导入页面中,<%@ taglib uri=”jar包路径” prefix =”别名”%>:prefix 是个给jar包起个名字

jsp中的动作标签:
1.:请求包含设置,这种设置是动态的,和include指令设置的是不一样的,动态的请求包含,是先进行java文件的翻译,当需要进行请求包含的时候,在进行service方法的合并,所有会产生俩.java文件
2.:请求转发
3.:对属性进行设置值,要注意的是这中标签动作只能在请求转发或者请求包含中写,是不能写在包含的外面的
4.创建一个对象
5.给指定的对象属性赋值:这个指令是和联合使用的,只能写在标签的里面
6.获取指定的属性值

<jsp:useBean id="user" type="com.lanou.jsp.User">
<jsp:setProperty property="张三" name="userName"/>
</jsp:useBean>

jsp的9个内置对象
1.request
2.response
3.session
4.application:指的就是域对象servletContext
5.exception:异常
6.page :当前的这个servlet类的实例对象,相当于this
7.config:服务器的一些配置信息
8.out:相当于servlet类中的response.getWriter()
9.PageContext:指当前页面中的域对象,pageContext对象的生命周期只存在本页面中
要注意的是内置对象是写在小脚本中的,是不能写在html中的,在9个内置对象中,尤为重要的是pageContext对象
pageContext对象是一个域对象,但是一旦离开本页面pageContext就销毁了,我们常常会用到pageContext中的几个很重要的方法

//在本页面来将数据存储到域对象中
//存储到pageContext域中
pageContext.setAttribute("name","张三");
//存储到request域中
pageContext.setAttribute("name","张三",PageContext.REQUEST_SCOPE);
//存储到session域中
pageContext.setAttribute("name","张三",PageContext.SESSION_SCOPE);
//存储到context域中
pageContext.setAttribute("name","张三",PageContext.APPLICATION_SCOPE);

所以,我们可以利用pageContext内置对象来对每个域对象中的属性来进行set,get,remove操作
我们还可以利用find方法来查询所有的域对象中的属性

pageContext.findAttribute("name");
//这个方法的原理是:先从生命周期短的域对象中找,然后在从生命周期长的域对象中找,直到找到位置
//当然我们也可以在指定的域对象中去寻找
pageContext.findAttribute("name",REQUEST_SCOPE);

EL表达式
EL表达式的主要作用是用来获取域中的数据,EL表达式的实现主要是依赖于pageContext的findAttribute( )方法来实现的
EL表达式的形式: ${ }
EL表达式是直接写在body中的

${user} //相当于 pageContext.findAttribute("user");

注意:EL表达式只能获取存在域中的值
如果存在域中的是一个javaBean实体类对象的话,我们可以通过el表达式来获取对象的属性值


${user.name}//本质是:先通过pageContext.findAttribute("user")找到user对象,然后通过getName方法找到name的值,所以user对象一定要复合javaBean规范
${user['name']}//也是可以获取到属性的值的
${array[1]}//当对象是数组的话,只能通过下标来获取里面的值的时候,不能通过.方法,只能用[下标]的来完成

EL表达式中的empty:empty是来判断一个对象是否为空

String  s1 = null;
String s2 = "";
${empty s1}
${empty s2}
//两个输出结果都是为true,只有当string对象中有值的时候才会为false

EL表达式中的隐式对象
所有的隐式对象都是在el表达式中来使用的,所有的内置对象都是在小脚本中使用的
1.pageContext:

        pageContext对象是可以调用方法的
        例如获取文件的根目录的路径
        ${pageContext.request.ContextPath};

2.pageScope
3.requestScope
4.sessionScope
5.applicationScope

<%pageContext.setAttribute("p", "page", PageContext.PAGE_SCOPE); %>
<%pageContext.setAttribute("p", "request", PageContext.REQUEST_SCOPE); %>
<%pageContext.setAttribute("p", "session", PageContext.SESSION_SCOPE); %>
<%pageContext.setAttribute("p", "context",PageContext.APPLICATION_SCOPE); %>
<%--el表达式中的隐式对象:可以直接在el表达式中使用--%>
${pageScope.p}
${requestScope.p}
${sessionScope.p}
${applicationScope.p}

6.param

${param.userName};//直接获取form表单传过来的name为userName的属性的值

7.paramValues:当form表单传递过来的name对应的属性值有很多的时候,我们使用数组来接收

${paramValuses.name};//获得的是一个数组

8.header:请求头

${header["User-agent"]};//获取请求头

9.headerValues
10.cookie

${cookie.JSESSIONID.value};//获得的是sessionid;如果不加value,获得的就是sessionID的在内存中的地址

JSTL标签库

jstl是一个比较常用的第三方标签库,我们需要导入第三方jar包并且利用指令taglib引入jar包,并给标签库起个名字
jstl标签库中常用的一些标签有:set,out,remove

<%@ taglib url ="jar包的路径" prefix = "c"%>
//利用jstl标签库中的set标签进行声明一个标量
<c:set var="name" value = "zhangsan" scope = "session"></c:set>;
//利用标签库来进行输出
<c:out ${name} default="abc"></c:out>
//利用标签库中的remove标签来删除
<c:remove var ="name" scope = "session"></c:remove>

jstl标签库中常用的一些条件标签库 if choose foreach

<c:if ${a>0}>
aaaaa
</c:if>
//choose标签通常是和when标签一起使用的
<c:choose>
    <c:when test=0>
    aaa
    </c:when>
    <c:when test=1>
    bbb
    </c:when>
    <c:when test=2>
    ccc
    </c:when>
    <c:otherwise>
    ddd
    </otherwise>
</c:choose>

foreach标签的使用

<%--循环 var就是变量,begin就是var的初值,end就是var的结束值 step就是var参数的循环增量 --%>
<c:forEach var="i" begin="0" end="10" step="2">${i}<br></c:forEach>
<%--对数组(容器)进行遍历   items代表的是要遍历的容器 var代表的是容器中保存的对象--%>
<c:forEach var="i" items="${list}" step="1">${i}</c:forEach>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值