您现在的位置是:首页 > 日记日记

jsp笔记

薄荷2019-09-21【日记】1人已围观

简介jsp笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_24271537/article/details/81161233

一、介绍

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中,脚本片段被复制粘贴到对应位置执行

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

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"%>

2. include 指令   --- 用于实现页面包含的效果

格式:  <%@ include file = "head.jsp"%>

3. 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);//删除该属性

2. 域对象的生命周期从大到小:

servetContext  >  session  >  request  >   pageContex

三、JSP标签技术

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

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

2、EL表达式

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

基本结构:  ${表达式}

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

提供了一下功能:

a. 获取常量、变量(其必须存入域中)、表达式的值

  1. <%
  2. String name = "tangpeng";
  3. pageContext.setAttribute("name",name);
  4. %>
  5. ${name}
  6. ${124+123}

b.获取域中数组或集合的数据

  1. <%
  2. String[] names = {"A","B","C"};
  3. request.setAttribute("names",names);
  4. %>
  5. ${name[0]}
  1. <%
  2. Map map = new HashMap();
  3. map.put("name","tang");
  4. request.setAttribute("map",map);
  5. %>
  6. ${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

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

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

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

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

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

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

  1. <%
  2. Map map = new HashMap();
  3. map.put("name","aa");
  4. map.put("nickname","bb");
  5. request.setAttribute("map",map);
  6. %>
  7. <c:set target="${map}" property="name" value="111"/>
  8. <c:set target="${map}" property="nickname" value="222"/>
  9. ${map.name}

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

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

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

  1. <c:if test="${3>5}">步骤1</c:if>
  2. <c:if test="${6<3}">步骤2</c:if>
  3. //如果满足条件就执行对应的步骤

(3)<c:forEach></c:forEach>   --对集合或数组等元素进行循环遍历或者执行指定次数的循环

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

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

   begin:  指定循环从哪里开始

   end:  指定循环从哪里接收

   step: 指定循环是的步长

   其他看word笔记

a.  遍历域中的数组

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

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

  1. <%
  2. Map map = new HashMap();
  3. map.put("name","aa");
  4. map.put("nickname","bb");
  5. %>
  6. <c:forEach item="${map}" var="entry">
  7. ${entry.key} : ${entry.value}
  8. </c:forEach>

Tags: