发表于: 2019-12-03 23:26:45

1 946



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

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. 获取常量、变量(其必须存入域中)、表达式的值

<%

    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>

-----------------------------------------------------------

写完Controller

学习json

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

JSON 是轻量级的文本数据交换格式

JSON 独立于语言 *

JSON 具有自我描述性,更易理解


数据在名称/值对中    "id":"01"

数据由逗号分隔

花括号保存对象

方括号保存数组

JSON 值

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true 或 false)

数组(在方括号中)

对象(在花括号中)

null

JSON 对象

JSON 对象在花括号中书写:

对象可以包含多个名称/值对:

{ "firstName":"John" , "lastName":"Doe" }

JSON 数组

JSON 数组在方括号中书写:

数组可包含多个对象:

{        

"employees": [        

{ "firstName":"John" , "lastName":"Doe" },        

{ "firstName":"Anna" , "lastName":"Smith" },        

{ "firstName":"Peter" , "lastName":"Jones" }        

]        

}

JSON 使用 JavaScript 语法

var employees = [ 

{ "firstName":"John" , "lastName":"Doe" }, 

{ "firstName":"Anna" , "lastName":"Smith" }, 

{ "firstName":"Peter" , "lastName": "Jones" } 

];

employees[0].firstName 返回的是john

JSON 使用

JSON经常应用到的场景是:在后台应用程序中将响应数据封装成JSON格式,传到前台页面之后,需要将JSON格式转换为JavaScript对象,然后在网页中使用该数据。

由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。


问题:有点懵 但是敲了一个SSM后 有点理解了 有BUG 没解决

完成:SSM的CRUD , 学习什么是JSON ,简单的JSP页面

明天计划:接着SSM理解 任务2



返回列表 返回列表
评论

    分享到