JavaWeb(五)

JSP

jsp 介绍
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet。
html:静态内容
servlet:适合编写java逻辑代码
jsp:适合编写输出动态内容,但不适合编写java逻辑。
Jsp 原理(编译执行过程):试写一个获取当前系统时间的 jsp
jsp的最佳写法:试写 登录 处理登录逻辑 登录成功(欢迎页) 页面
jsp的基本语法
1.html 标签
2.
小脚本 <% java代码 %>
表达式 <%= 2+3 %>
声明   <%! %> 表示在类中定义全局成员,和静态块。
JSP注释:<%-- 被注释的内容 --%> 特点:安全,省流量
网页注释:<!-- 网页注释 -->    特点:不安全,费流量
jsp的3个指令
page
page import和java代码中的import是一样的
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
JSP会自动导入以下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

session 默认值是true
errorPage: 如果页面中有错误,则跳转到指定的资源。
isErrorPage: 是否创建throwable对象。默认是false;
contextType:==response.setContextType(“text/html;charset=utf-8”);

Include
静态包含:把其它资源包含到当前页面中。
<%@ include file="/include/1.jsp" %>
动态包含:
<jsp:include page="/include/1.jsp"></jsp:include>

两者的区别:翻译的时间段不同
前者:在翻译时就把两个文件合并
后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
原则:能用静的就不用动的。

taglib
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
需要导入 jar 包
jstl.jar standard.jar
https://mvnrepository.com/
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
jsp的6个动作
<jsp:include > 动态包含
<jsp:forward> 请求转发
<jsp:param> 设置请求参数
<jsp:useBean> 创建一个对象
<jsp:setProperty> 给指定的对象属性赋值
<jsp:getProperty> 取出指定对象的属性值
jsp的9个内置对象
request
response
session
application
exception
page 当前servlet实例 this
config
out
pageContext 指当前页面 域对象 然并卵
void setAttribute(String name,Object o);
Object getAttribute(String name);

操作其它域对象的方法
void setAttribute(String name,Object o,int Scope);
Object getAttribute(String name,int Scope);
void removeAttribute(String name,int Scope);
scpoe的值:
PageContext.PAGE_SCOPE 
PageContext.REQUEST_SCOPE 
PageContext.SESSION_SCOPE 
PageContext.APPLICATION_SCOPE
findAttribute(String name); 
自动从page request session application依次查找,找到了就取值,结束查找。
实际开发使用的域对象:
PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。
ServletRequest: request  存放的数据在一次请求(转发)内有效。使用非常多。
HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息
ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。

EL表达式:expression language 表达式语言 要简化jsp中java代码开发。它不是一种开发语言,是jsp中获取数据的一种规范
功能:
获取数据,EL表达式能获取存在4个作用域中的数据
${u} 相当于 pageContext.findAttribute(“u”);
EL获取对于null这样的数据,在页面中表现为空字符串

<%
    String str1 = null;
    request.setAttribute("str1", str1);
    String str2 = "";
    request.setAttribute("str2",str2);
    String str3 = "abc";
    request.setAttribute("str3", str3);
    List list1 = new ArrayList();
    request.setAttribute("list1", list1);
    List list2 = new ArrayList();
    list2.add("asdf");
    request.setAttribute("list2", list2);
    int sex = 0;
    request.setAttribute("s", sex);
%>
${ empty str1 }
${ empty str2 }
${ empty str3 }
${ empty list1 }
${ empty list2 }

EL表达式 的隐式对象

pageContext(对象)
pageScope
requestScope
sessionScope
applicationScope
param 
${param.userName }request.getParamemter("userName");
paramValues
header ${header["User-agent"]}
headerValues
cookie ${cookie.JSESSIONID.value } 测试不加value
三元运算符
&{empty list3 ? "你没买东西":"已购买的商品是"}
Html 代码中测试
<input type="radio" name="sex" value="m" ${s==0 ? "checked='checked'":"" }/>男<br/>
<input type="radio" name="sex" value="f" ${s==1 ? "checked='checked'":"" }/>女<br/>
JSTL
什么是JSTL:JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
JSTL的作用:使用JSTL实现JSP页面中逻辑处理。如判断、循环等。
使用JSTL需要在JSP页面添加taglib指令 添加核心库
通用标签: set、 out、 remove

<!-- 声明一个变量 num -->
<c:set var="num" value="10" scope="session"></c:set>    
输出变量:<%-- <c:out value="${num }"></c:out> --%>${num }      
<c:remove var="num" scope="session"/>      
输出变量:<c:out value="${num }" default="aaa">
        </c:out>
条件标签:if  choose(没有 else)
<c:if test="${5>3}">
    aaaaaaaaaaa
</c:if>
<c:if test="${num<3}">
    bbbbbb
</c:if>   
<c:choose>
    <c:when test="${num==1 }">aaa</c:when>
    <c:when test="${num==2 }">bbb</c:when>
    <c:when test="${num==3 }">ccc</c:when>
    <c:otherwise>dddd</c:otherwise>
</c:choose>

迭带标签:foreach
<%
    List list = new ArrayList();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    request.setAttribute("list", list);
 %>
<c:forEach var="i" begin="1" end="10" step="2"> 
    ${i }<br/>
</c:forEach>
<%
    List list = new ArrayList();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    list.add("eee");
    list.add("ffff");
    request.setAttribute("list", list);
 %>

<table border="1">
    <tr>
        <th>数据</th>
        <th>索引</th>
        <th>计数</th>
        <th>第一个</th>
        <th>最后一个</th>
    </tr>
    <c:forEach items="${list }" var="l" varStatus="vs">
        <tr}>
            <td>${l }</td>
            <td>${vs.index }</td>
            <td>${vs.count }</td>
            <td>${vs.first }</td>
            <td>${vs.last }</td>
        </tr>
    </c:forEach>
</table>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值