JSP总结

一、介绍

1.优点:解决了servlet不适合向外响应一个完整的页面,又解决了html无法展示动态数据的问题;

2.内部原理:JSP在第一次访问时,会被翻译成一个servlet,对JSP访问后看到的页面其实就是翻译后的servlet;

没有实现前后端分离:

前后端分离:核心思想:前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互

二、语法

1.模板元素

定义:直接写在jsp页面的html内容称之为jsp页面的模板元素;模板元素在翻译过来的servlet中被out.write()原样输出到浏览器中;

2.JSP表达式 --取值

常量  : <%="hello"%>

变量 : <%String name="aa"%>    //定义变量

       <%=name%>  //取变量的值
       
表达式: <%=100+123%

       <%=request.getContextPath()%>

3.JSP脚本片段

<%若干Java语句%>

在翻译过来的servlet中,脚本片段被复制粘贴到对应位置执行

<% for(int i=0; i<5; i++){ %>
	Hello JSP~~~~~<br/>
<% } %>

4.JSP注释

格式:<%–JSP注释–%>

5.JSP指令

位置: 可以写在JSP页面的任意位置

格式:<%@ 指令名称 若干属性声明%>

1)page指令 --用来声明当前JSP页面的基本属性

eg1:  <%@ page language="java" %> -- 指定当前JSP使用的语言是java

eg2:  <%@ page pageEncoding="UTF-8"%> -- 用来通知JSP解析引擎使用指定的编码来翻译JSP

注意:如果想防止JSP乱码,应该要保证JSP文件保存时的编码和pageEncoding指定的编码保持一致

 eg3:  <%@ page session="true"%> -- 用来指定当前页面是否使用session,如果设置为true

则翻译过来的servlet中将会有对session对象的引用,于是可以直接在JSP中使用session隐式对象;

但是这将导致一旦访问JSP就会调用request.getSession()方法,可能导致不必要的空间浪费;

如果确定JSP中不需要session可以设为false;

eg4: <%@ page errorPage="filepath"%> -- 为当前JSP页面指定友好错误提示页面,即当前JSP如果抛出了异常,将会跳转到errorPage属性指定的页面。 

扩展:JSP提示信息设置

—如果整个WEB应用很多JSP都需要指定错误提示页面,如果挨个为每一个JSP通过errorPage来指定,非常繁琐,所以推荐在web.xml文件中为整个网站的异常统一配置友好错误提示页面,配置如下:

eg5:  <%@ page import="..."%>  为JSP翻译后的servlet指定所依赖的jar包

eg1:  <%@page import="java.util.Date"%>
  1. include 指令 — 用于实现页面包含的效果
格式:<%@ include file = "head.jsp"%>
  1. taglib指令 – 用于导入tld标签库文件

三、JSP九大隐式对象

1.介绍: 可以在JSP页面直接使用这九大对象

page this

request ServletRequest

response ServletResponse

application ServletContext

session HttpSession

config ServletConfig

exception 异常信息的对象

out 等价于response.getWriter()

pageContext

代表当前JSP页面的运行环境的对象;

可以通过他获取其他八大隐式对象,例如:ageContext.getPage() ;

pageContext 是一个域对象

有生命周期:当访问JSP开始时创建pageConext对象,当访问JSP结束时销毁pageContext对象

作用范围:整个JSP页面

主要功能:在整个JSP页面中实现数据的共享

方法:setAttribute(String name,Object value)  ;  //添加一个相应的域属
例如:request.setAttribute("names",names); //向request域中添加一个属性
getAttribute(String name)  ; 
removeAttribute(String name);//删除该属性
  1. 域对象的生命周期从大到小:
servetContext  >  session  >  request  >   pageContex

三、JSP标签技术

1、背景:在JSP页面写入大量Java代码会导致JSP页面中的html代码和Java代码混杂,非常混乱;

所以推荐使用标签来代替JSP页面的Java代码 ;

2、EL表达式

优点:可以非常方便的获取数据,可以代替JSP页面中的JSP表达式

基本结构: ${表达式}

作用:只能获取不能设置和遍历

提供了一下功能:

a. 获取常量、变量(其必须存入域中)、表达式的值
<%
    String name = "tangpeng";
    pageContext.setAttribute("name",name);
%>
    ${name}
    ${124+123}
b.获取域中的数组或集合的数据

<%
   String[] names = {"A","B","C"};
    request.setAttribute("names",names);
%>
    ${name[0]}
<%
    Map map = new HashMap();
    map.put("name","tang");
    request.setAttribute("map",map);
%>
    ${map.name}

3、JSTL标签库

(1)在使用JSTL标签库之前,必须在JSP中通过taglib指令引入JSTL标签库;

如果缺少JSTL库相关的jar,需要提前导入jar包 ;

a. 导入JSTL的jar包

直接放在WEB-INF/lib下

b. 引入JSTL库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

常用标签:

(1)<c:set></c:set>

a. 往四大作用域中添加一个域属性

scope属性 用于指定将属性存入哪一个域中,可以取值为:page,request,session,application

<c:set var="name" value="tangpeng" scope="request"/>
${name}

b. 修改四大作用域中已有的属性

如果重复添加相同的属性,值会发生覆盖 ;

<c:set var="name" value="谈判" scope="page">
${name}

c. 修改 作用域中map集合中的属性

target 指定修改域中的哪一个集合 ; property 指定修改域中集合中的一个属性

<%
    Map map = new HashMap();
    map.put("name","aa");
    map.put("nickname","bb");
    request.setAttribute("map",map);
%>
 
<c:set target="${map}" property="name" value="111"/>
<c:set target="${map}" property="nickname" value="222"/>
${map.name}

(2)<c:if></c:if> --构造if…else…语句

test属性用于指定判断的条件

注意: JSTL中没有提供else对应的标签

<c:if test="${3>5}">步骤1</c:if>
<c:if test="${6<3}">步骤2</c:if>

//如果满足条件就执行对应的步骤
(3)<c:forEach></c:forEach> --对集合或数组等元素进行循环遍历或者执行指定次数的循环

item: 指定需要遍历的数组或集合

var: 指定用于接收遍历过程中的元素

begin: 指定循环从哪里开始

end: 指定循环从哪里接收

step: 指定循环是的步长

其他看word笔记

a. 遍历域中的数组

<%
    String[] name={"a","b","c"};
    pageContext.setAttribute("names",name);
%>
 
<c:forEach item="${names}" var="i">
    ${i}
</c:forEach>

b.遍历域中map集合的元素

<%
    Map map = new HashMap();
    map.put("name","aa");
    map.put("nickname","bb");
%>

<c:forEach item="${map}" var="entry">
    ${entry.key} : ${entry.value}
</c:forEach>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值