2019-09-19

事务是一系列的操作,当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。增删改,为什么将setAutoCommit设置为false
因为要在service层处理事务

servleit 字符集 提取表单信息
resp.setContentType
req.setCharacterEncoding("utf-8");
req.getparameter 从前台获取数据
req.setAttribute在服务器端保存值目的是把数据传到页面
Web层的数据共享,四个作用域(Scope)

  1. PageContext-----------page 保存的数据当前页面有效
  2. HttpServletRequest--------request 请求
  3. HttpSession------------------session 关闭浏览器数据失效
  4. ServletContext--------------application 关闭服务器数据失效

jsp的内置对象:request out session application response page pageContext config exception
请求转发与重定向的区别:

  1. 转发是一次请求而重定向是两次请求
  2. 只能转主站内的资源而重定向可以定向任意资源
  3. 如果是请求方,那么URL是第一次转发时候的地址
    而重定向会直接定向到最终的目标资源
    //资源的跳转(请求转发:从A资源跳转到B资源,客户向服务器发送了一次请求)
    //转发
    // RequestDispatcher rd=req.getRequestDispatcher("/aa");
    // rd.forward(req, resp);
    //重定向
    resp.sendRedirect("/Java3DemoWebProject/aa");

提取客户端表单信息:req.getParameter
修改字符集:req.setCharacterEncoding
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
PrintWriter out=resp.getWriter();
String name=req.getParameter("name");//获取表单参数

JavaWeb基础

  1. Web项目的结构(基于请求和响应的)

<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="_x0000_i1043" type="#_x0000_t75" style="width:257.25pt;
height:121.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>

  1. 基本的概念:Http(无状态连接协议) URL Web服务器(tomcat) 三层结构(MVC)

组件(可重用的) JavaEE(它是一个标准:jdbc jsp servlet) C/S与B/S Web容器(服务器就是一个web容器)

3.常见的服务端语言:PHP JSP Python C# JavaScript(Nodejs)

4.下载并安装一个web应用服务器:Tomcat

http://tomcat.apache.org/

目录结构:

<v:shape id="_x0000_i1042" type="#_x0000_t75" style="width:63.75pt;height:127.5pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" o:title=""></v:imagedata></v:shape>

Bin:存放了一些可执行文件(.bat) startup.bat启动服务器

Shutdown.bat停止服务器

Conf:存放了一些配制文件server.xml(核心)

<Connector connectionTimeout="20000" port="8089" protocol="HTTP/1.1" redirectPort="8443"/>

Lib:web开发所需要的类库

Log:服务器的日志信息

Webapps:所有的web项目都会发布到此文件夹中

5. 还需要配制环境变量

<v:shape id="_x0000_i1041" type="#_x0000_t75" style="width:192.75pt;height:257.25pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title=""></v:imagedata></v:shape>

6.要将tomcat与eclipse整合

<v:shape id="_x0000_i1040" type="#_x0000_t75" style="width:240.75pt;height:186.75pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png" o:title=""></v:imagedata></v:shape>

创建Web项目几种:

  1. 创建一个普通的JavaWeb项目

  2. 利用Maven创建一个JavaWeb项目

7.web项目的结构

<v:shape id="_x0000_i1039" type="#_x0000_t75" style="width:141pt;height:162.75pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image005.png" o:title=""></v:imagedata></v:shape>

WebContent:可以存放静态资源(html,css,js,img)

每个web项目中核心的配制文件:web.xml

注意:WEB-INF下面资源对用户是不可见的

8.什么是Servlet(控制器controller):服务器端的小应用程序。作用:可以处理客户端的请求,可以进行资源跳转。

如何创建一个servlet程序

  1. 当前类要继承HttpServlet

  2. doGet(HttpServletRequestreq, HttpServletResponseresp)

3. doPost(HttpServletRequestreq, HttpServletResponseresp)

说明:如果客户端向服务器端发的请求的方式为get,调用doGet

如果客户端向服务器端发的请求的方式为post,调用 doPost HttpServletRequest接口,是由web容器对其进行初始化的,作用:可以

封装请求的数据(参数)

HttpServletResponse接口,作用:向客户端响应结果(html/img/css)

  1. 配制web.xml文件

<v:shape id="_x0000_i1038" type="#_x0000_t75" style="width:339.75pt;height:204.75pt;visibility:visible;
mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image006.png" o:title=""></v:imagedata></v:shape>

  1. servlet的生命周期的三个方法地:

init() 初始化 service()响应客户请求 destroy()销毁

  1. HTTPServletRequest的作用 ü 提取客户端请求信息 Ø 提取客户端表单信息req.getParameter("email"); Ø 提取HTTP请求报头信息 Ø cookie ü 修改字符集req.setCharacterEncoding("utf-8"); ü 在服务器端保存值

如果想要在页面上输出list中的对象的信息,在Servlet中是非常麻烦的(不建议),推荐JSP(Java Server Page)动态网页:与数据库有交互。JSP就是一个简化的Servlet,所有的Jsp网页都会由Web容器自动编译成Servlet最终执行的。

JSP如何创建,里面都写什么?可以写Java代码、HTML、CSS、JavaScript

如何在服务端(Servlet)保存值:

req.setAttribute("list", list);

在Jsp中如何获取到保存在服务端的list集合?

request.getAttribute("list");

ü WEB资源跳转 — 请求转发

两种跳转的方式:

  1. 转发:客户端向服务器只发送了一次请求

<v:shape id="_x0000_i1037" type="#_x0000_t75" style="width:263.25pt;height:159.75pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png" o:title=""></v:imagedata></v:shape>

  1. 重定向:发送了两次请求

请求转发与重定向的区别:

  1. 转发是一次请求而重定向是两次请求

  2. 只能转主站内的资源而重定向可以定向任意资源

  3. 如果是请求发,那么URL是第一次转发时候的地址

而重定向会直接定向到最终的目标资源

思考:我们现在做的删除,修改,显示所有的留言信息是否需要每一个操作都要对应一个Servlet(不建议),我们可以将以上的这些操作放到一个Servlet中(创建一个ManagerServlet)

如何确定页面上的某一个操作将会对应Servlet中的某一个方法?我们需要从页面向后台传递参数!!!

传递参数的方式:

  1. 通过表单传递 前台?name=tom&password=123&

n 后台request.getParameter(“name”);

n 隐藏域<input type=”hidden” name=”q” value=”123”>

  1. 通过超链接向后台传递参数

n <a href=”/工程名/映射地址?id=?&q=delete”>删除</a>

<v:shape id="图片_x0020_2" o:spid="_x0000_i1036" type="#_x0000_t75" style="width:414.75pt;height:229.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image008.png" o:title=""></v:imagedata></v:shape>

HTTPServletResponse的作用 ü 设置响应字符集

resp.setContentType("text/html;charset=utf-8"); ü 向客户端输出信息

out.println("添加失败"); Ø 输出DHTML和数据 Ø 输出二进制文件 Ø 输出Cookie Ø 输出XML( Ajax) ü WEB资源跳转 — 请求重定向

利用ServletContext可以获取到web.xml配制文件中的初始化参数。

//ServletConfig可以获取到初始化的参数(局部的初始化参数)

//<init-param>

// <param-name>pageSize</param-name>

// <param-value>10</param-value>

//</init-param>

//String abc = config.getInitParameter("pageSize");

//如何获取到全局的初始化参数

// <context-param>

// <param-name>abc</param-name>

// <param-value>123</param-value>

// </context-param>

String abc = config.getServletContext().getInitParameter("abc");

JSP的内置对象

request response session out
application

pageContext page config exception

MVC模式(设计模式):单例(链接数据库的时候) 工厂 代理 动态代理

M:Model模型

V:View 视图

C:Control 控制器

<v:shape id="图片_x0020_3" o:spid="_x0000_i1035" type="#_x0000_t75" style="width:365.25pt;
height:204.75pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png" o:title=""></v:imagedata></v:shape>

MVC的优点 ü 低耦合性(减少层与层之间的依赖关系) ü 高重用性 ü 可维护性

三种JSP指令 1. page

  1. include

  2. taglib (自定义标签)

在WEB应用中处理乱码问题

  1. 需要设置请求与响应的字符编码集

  2. Jsp头的字符编码集

  3. HTML页面的字符编码集

  4. MySql数据库的字符编码集

  5. 设置服务器器的编码集server.xml

注意: <a href="<%=path %>/user/manager?id=<%=gb.getId() %>&q=delete&name=张三" class="btn btn-danger">删除</a>

后台:String name = req.getParameter(“name”);//此时获取到的name是乱码

解决方法:

String username = new String(name.getBytes(“ISO-8859-1”),”utf-8”);

JSP的动作标签有几个?

<jsp:useBean> <jsp:getProperty> <jsp:setProperty>

<jsp:forward> <jsp:include>

EL( Expression Language) — 表达式语言 ü 是JSP中一种简洁的数据访问语言 ü 简化JSP的开发 • 主要功能 ü 通过它可以在JSP网页中方便地访问,并输出: Ø 存储在作用域中的对象及其属性 Ø 访问请求参数、 cookie和其他请求报文中的信息 ü 简单的运算:算数、关系、逻辑、条件求值 • 语法格式 ${expression}

EL中的隐式对象

<%request.setAttribute(“username”,”kitty”)%>
{requestScope.username}/{username}

<%session.setAttribute(“username”,”kitty”)%>
${sessionScope.username}

${initParam.pageSize}

注意:默认情况下是从requestScope获取数据

JSP 标准标签库(JSTL)

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别。

· 核心(core)标签:<c:if> <c:forEach> <c:set> <c:out>

· 格式化标签

· SQL 标签

· XML 标签

· JSTL 函数

JSTL标签是第三方给我们提供好的库

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

<v:shape id="_x0000_i1034" type="#_x0000_t75" style="width:120pt;height:56.25pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image010.png" o:title=""></v:imagedata></v:shape>

凡是以xxx.tld结尾的都是标签文件

如何在Jsp页面中引用jstl的核心标签库

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

JSP(servlet) 过滤器:Filter

JSP 和 Servlet 中的过滤器都是 Java 类。

过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet。过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。

过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:

· 在客户端的请求访问后端资源之前,拦截这些请求。

· 在服务器的响应发送回客户端之前,处理这些响应。

根据规范建议的各种类型的过滤器:

· 身份验证过滤器(Authentication Filters)。

· 数据压缩过滤器(Data compression Filters)。

· 加密过滤器(Encryption Filters)。

· 触发资源访问事件过滤器。

· 图像转换过滤器(Image Conversion Filters)。

· 日志记录和审核过滤器(Logging and Auditing Filters)。

· MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)。

· 标记化过滤器(Tokenizing Filters)。

· XSL/T 过滤器(XSL/T Filters),转换 XML 内容。

过滤器通过 Web 部署描述符(web.xml)中的 XML 标签来声明,然后映射到您的应用程序的部署描述符中的 Servlet 名称或 URL 模式。

当 Web 容器启动 Web 应用程序时,它会为您在部署描述符中声明的每一个过滤器创建一个实例。

Filter 的执行顺序与在 web.xml 配置文件中的配置顺序一致,一般把 Filter 配置在所有的 Servlet 之前。

<v:shape id="_x0000_i1033" type="#_x0000_t75" alt="http://www.runoob.com/wp-content/uploads/2014/01/20161112201612568.png" style="width:315.75pt;height:187.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image011.png" o:title="20161112201612568"></v:imagedata></v:shape>

Servlet 过滤器方法

过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:

|

序号

|

方法 & 描述

|
|

1

|

public void doFilter (ServletRequest, ServletResponse, FilterChain) 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。

|
|

2

|

public void init(FilterConfig filterConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

|
|

3

|

public void destroy() Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

|

一、Filter 的基本工作原理

1、Filter 程序是一个实现了特殊接口的 Java 类,与 Servlet 类似,也是由 Servlet 容器进行调用和执行的。

2、当在 web.xml 注册了一个 Filter 来对某个 Servlet 程序进行拦截处理时,它可以决定是否将请求继续传递给 Servlet 程序,以及对请求和响应消息是否进行修改。

3、当 Servlet 容器开始调用某个 Servlet 程序时,如果发现已经注册了一个 Filter 程序来对该 Servlet 进行拦截,那么容器不再直接调用 Servlet 的 service 方法,而是调用 Filter 的 doFilter 方法,再由 doFilter 方法决定是否去激活 servlet 方法。

4、但在 Filter.doFilter 方法中不能直接调用 Servlet 的 service 方法,而是调用 FilterChain.doFilter 方法来激活目标 Servlet 的 service 方法,FilterChain 对象时通过 Filter.doFilter 方法的参数传递进来的。

5、只要在 Filter.doFilter 方法中调用 FilterChain.doFilter 方法的语句前后增加某些程序代码,这样就可以在 Servlet 进行响应前后实现某些特殊功能。

· 6、如果在 Filter.doFilter 方法中没有调用 FilterChain.doFilter 方法,则目标 Servlet 的 service 方法不会被执行,这样通过 Filter 就可以阻止某些非法的访问请求。

数据共享有几种方式:

JavaWeb中的会话

Http协议:它是一种无状态的链接协议。客户端向服务器端发送了多次请求,服务器端无法确定是不是同一个用户。如何解决以上问题:就要使用JavaWeb中的会话技术。

什么是会话:客户端与服务器之间的数据传递。(登录,购物车)

会话的管理:管理数据

常用的会话技术:Cookie(客户端) Session(服务器端)

Cookie它是客户端的技术,程序会把每个用户的数据以Cookie的形式写给用户的各自浏览器

再次访问Web服务器的时候,会将生成的id(Cookie)一起发送给服务器。

Cookie类:java.Servlet.http主要用于存储会话数据。

1.构造器Cookie(Stringname, Stringvalue)``以名(key)值(value)对的方式来保存会话数据的

2.setMaxAge(int expiry)``设置Cookie的有效时间(时间以秒为单位)

有效时间一天(1*24*60*60)

3.``如何从服务器端向服务器端发送Cookie:resp.addCookie(Cookiecookie)

4.服务器端读取客户端发送的Cookie信息 req.getCookies() Cookie[]

  • Cookie的原理

  • 1.要在服务器端创建Cookie对象,要将会话的数据保存到吗会话中。

  • 2.服务器会发送<u>Cookei</u>到浏览器端

  • 3.浏览器会在下次访问服务器的时候会携带<u>Cookei</u>的信息(这些信息会保存在<u>http</u>的请求头当中)

  • 4.服务器会接收到浏览器携带的Cookie信息

  • 注意:cookie.setMaxAge(130246060)

1.正数:表示cookie的数据保存到硬盘中。

2.负数:只会保存到浏览器的内存当中,只要浏览器关闭,<u>cookei</u>就失效了

3.0表示会删除同名的<u>cookei</u>数据

<u>cookei</u>中的数据智能保存非中文字符串类型。我们可以保存多个<u>cookei</u>,一个浏览器能保存300个<u>cookei</u>

每个站点可以保存20个<u>cookei</u>,每个<u>cookei</u>的大小为4KB

Session是服务器端的会话技术,服务器在运行的时候,会为每一个用户创建一个单独的Session

Session可为用户的浏览器独享。(只要浏览器不关闭保存在session中的信息会一直存在)

Session(HttpSession对象)中的和新方法:

getId()``获取到session的id

setAttribute(Stringname, Objectvalue)``向session当中保存对象

getAttribute(Stringname) 从session当中获取对象

removeAttribute(Stringname)``根据key删除session中的对象

invalidate()``销毁session对象

Session``的工作原理:

1. 第一次服务器会创建一个seesion对象,给它分配一个唯一的id(JSESSIONID)

2. 要将JSESSIONID``作为cookei的值发送给客户端保存

3. 第二次再发送请求的时候浏览器会携带JSESSIONID的cookei信息来访问服务器

4. 服务器要得到JSESSIONID,然后在服务器的内存当中搜索是否存在对应的session对象

5. 如果找不到就直接返回该对象

注意:保存到session的数据会被多个jsp、servlet共享

数据共享有几种方式:

Web层的数据共享,四个作用域(Scope)

  1. PageContext-----------page 保存的数据当前页面有效

  2. HttpServletRequest--------request 请求

  3. HttpSession------------------session 关闭浏览器数据失效

  4. ServletContext--------------application 关闭服务器数据失效

分页:有几种方法

  1. 前台分页 一次将数据全部取出

  2. 后台分页(数据库分页) Mysql:limit Oracle :rownum

a. 查询表中总的记录数

b. 计算总页数:总的记录数/每一页要显示的记录数

总的记录数/每一页要显示的记录数+1

c. 查询某一个区间段的数据

  1. 存储过程PLSQL(表)

  2. Ajax分页

  3. 1.MySQL:清楚如何利用MySQL进行分页(SQL怎么写)

  4. 分页需求:

  5. 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:

  6. 比如:

  7. 查询第1条到第10条的数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

  8. 查询第10条到第20条的数据的sql是:select * from table limit 10,20; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;

  9. 查询第20条到第30条的数据的sql是:select * from table limit 20,30; ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;

  10. 二:通过上面的分析,可以得出符合我们自己需求的分页sql格式是:select * from table limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的条数。

前台所使用的分页的插件:

  1. DisplayTag

  2. 可以使用自己定义的标签什么是 AJAX ?

AJAX = 异步 JavaScript 和 XML。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

AJAX的开发流程

1. 创建 XMLHttpRequest 对象

variable=new XMLHttpRequest();

  1. 向服务器发送请求

xmlhttp.open("GET","test1.txt",true);

xmlhttp.send();

  1. 服务器响应

<pre style="margin-top:6.65pt;background:
whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;padding:0cm;
mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">document.getElementById("myDiv").innerHTML=xmlhttp.responseText;</pre>

4. 根据状态的改变会触发onreadystatechange 事件

<pre style="margin-top:6.65pt;background:
whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;padding:0cm;
mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">xmlhttp.onreadystatechange=function()</pre>

<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt"> {</pre>

<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">if (xmlhttp.readyState==4 && xmlhttp.status==200)</pre>

<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt"> {</pre>

<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt"> document.getElementById("myDiv").innerHTML=xmlhttp.responseText;</pre>

<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">}</pre>

<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">}</pre>

Json的转换工具

概述

JSON是一种轻量化的数据传输格式,在各种场景都有运用。比如在ajax中,服务端的数据一般通过JSON字符串的格式传输给前端,前端ajax引擎自动将JSON字符串转化为JS对象(需要将ajax的返回内容格式设置为"json")。那么此时我们在后台服务器中就需要将封装好的JavaBean对象转化为JSON格式字符串来传输给前台ajax引擎,此时使用JSON转化工具将大大简化我们代码量。

首先我们需要明确的是什么是JSON格式

JSON格式有两种,一种是对象格式,另一种是数组格式(也可以叫集合)。

对象格式:{"key1":value1,"key2":value2......}

数组形式:[{对象1},{对象2}....]

<v:shape id="图片_x0020_1" o:spid="_x0000_i1032" type="#_x0000_t75" alt="https://img-blog.csdn.net/20181010104715244?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RpYW5qaW5kb25nMDgwNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" style="width:302.25pt;height:71.25pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image012.jpg" o:title="70"></v:imagedata></v:shape>

1. GSON转换工具

2. JSONLib转换工具:JSONArray JSONObject

3. Jackson转换工具

https://blog.csdn.net/tianjindong0804/article/details/80573127

JSON字符串如何转化成对象?

解析

1、定义:是指将符合 JSON 语法规则的字符串转换成对象的过程。

2、不同的编程语言都提供了解析 JSON 字符串的方法,在这里主要讲解 JavaScript 中的解析方法。主要有三种:

1)- 使用 eval()

2)- 使用 JSON.parse()

3)- 使用第三方库,例如 JQuery 等

eval()

1、eval() 函数的参数是一个字符串,其作用是直接执行其中的 JavaScript 代码。

2、eval() 能够解析 JSON 字符串。从这里也可以看得出,JSON 和 JavaScript 是高度嵌合的。

3、但是,现在已经很少直接使用 eval() 来解析了,如果您的浏览器版本真的是很旧,可能才需要这个方法。此外,eval() 是一个相对危险的函数,因为字符串中可能含有未知因素。在这里,作为学习,还是要知道这也是一种方法。

4、请注意 eval() 的参数,在字符串两旁加了括号,这是必须的,否则会报错。

5、因为 JSON 字符串是被大括号(“{}”)包围的,直接放到 eval() 会被当成语句块来执行,因此要在两旁加上括号,使其变成表达式。

示例代码

<script>

var str = “console.log(‘hello’)”;

eval(sre);

</script>

控制台输出的执行结果:

<v:shape id="图片_x0020_4" o:spid="_x0000_i1031" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180549578-1762621811.png" style="width:163.5pt;height:53.25pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image013.png" o:title="815181-20161027180549578-1762621811"></v:imagedata></v:shape>

示例代码

<script>

var str = ‘{ “name” : “Geoff Lui”,“age” : 26}’; //符合JSON语法规则的字符串

eval (“(“+str+”)”);

console.log(obj);

</script>

执行结果:

<v:shape id="图片_x0020_5" o:spid="_x0000_i1030" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180556828-373237556.png" style="width:207.75pt;height:69pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image014.png" o:title="815181-20161027180556828-373237556"></v:imagedata></v:shape>

JSON.parse()

1、现在绝大多数浏览器都以支持 JSON.parse(),是推荐使用的方式

示例代码:

<script>

var str = ‘{ “name” : “Geoff Lui”,“age” : 26}’; //符合JSON语法规则的字符串

var obj = JSON.parse(str);

console.log(obj);

</script>

执行结果:

<v:shape id="图片_x0020_6" o:spid="_x0000_i1029" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180605125-787278386.png" style="width:195pt;height:61.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image015.png" o:title="815181-20161027180605125-787278386"></v:imagedata></v:shape>

2、如果输入了不符合规范的字符串,会报错

3、JSON.parse() 可以有第二个参数,是一个函数。此函数有两个参数:name 和 value,分别代表名称和值。当传入一个 JSON 字符串后,JSON 的每一组名称/值对都要调用此函数。该函数有返回值,返回值将赋值给当前的名称(name)。

示例代码:

<script>

var str = ‘{ “name” : “Geoff Lui”,“age” : 26}’; //符合JSON语法规则的字符串

var obj = JSON.parse(str,fun);

function fun (name , value){

console.log(name + “: ” + value);

return value;

}

console.log(obj);

</script>

执行结果:

<v:shape id="图片_x0020_7" o:spid="_x0000_i1028" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180614406-1402965494.png" style="width:186.75pt;height:51.75pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image016.png" o:title="815181-20161027180614406-1402965494"></v:imagedata></v:shape>

示例代码:

<script>

var str = ‘{ “name” : “Geoff Lui”,“age” : 26}’; //符合JSON语法规则的字符串

var obj = JSON.parse(str,fun);

function fun (name , value){

if(name == “age” )

value = 14;

return value;

}

console.log(obj);

</script>

执行结果:

<v:shape id="图片_x0020_8" o:spid="_x0000_i1027" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180622593-1061276212.png" style="width:201.75pt;height:45pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image017.png" o:title="815181-20161027180622593-1061276212"></v:imagedata></v:shape>

JavaWeb复习:

Tomcat服务器的作用以及如何修改端口号server.xml,你还听说过哪些服务器?

<v:shape id="图片_x0020_16" o:spid="_x0000_i1026" type="#_x0000_t75" style="width:86.25pt;
height:149.25pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image018.png" o:title=""></v:imagedata></v:shape>

当服务器出问题如何解决:

<v:shape id="图片_x0020_17" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:172.5pt;
height:133.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image019.png" o:title=""></v:imagedata></v:shape>

jQuery 是一个 JavaScript 函数库。

jQuery 库包含以下特性:

· HTML 元素选取

· HTML 元素操作

· CSS 操作

· HTML 事件函数

· JavaScript 特效和动画

· HTML DOM 遍历和修改

· AJAX

jQuery 语法

jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作。

基础语法是:$(selector).action()

· 美元符号定义 jQuery

· 选择符(selector)“查询”和“查找” HTML 元素

· jQuery 的 action() 执行对元素的操作

文档就绪函数

您也许已经注意到在我们的实例中的所有 jQuery 函数位于一个 document ready 函数中:

<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">$(document).ready(function(){</pre>

<pre style="background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">--- jQuery functions go here ----</pre>

<pre style="background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">});</pre>

这是为了防止文档在完全加载(就绪)之前运行 jQuery 代码。如果在文档没有完全加载之前就运行函数,操作可能失败。

$(function(){

$('input').click(function(){

alert("first jquery......");

});

});

AJAX

https://cxl2012.iteye.com/blog/1551273

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,333评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,812评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,016评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,293评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,650评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,788评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,003评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,741评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,462评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,681评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,168评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,528评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,169评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,119评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,846评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,719评论 2 274

推荐阅读更多精彩内容

  • python****网络编程常用库使用手册 一、urllib3 ** Urllib3****是一个功能强大,条理清...
    奕剑听雨阅读 208评论 0 0
  • CentOS 7.2安装手册 一、系统安装 1. 系统引导 (1)成功引导系统后,会出现下面的界面 <v:shap...
    全宇宙最帅De男人阅读 712评论 0 1
  • 后期整理字体以及排版问题,修订不适合的翻译 “A wealth of information. Smart, ye...
    iamzzz阅读 713评论 0 0
  • ORACLE安装 安装包: 1.VMware-workstation-full-11.1.0-2496824.ex...
    longfou阅读 375评论 0 0
  • Sass&Gulp 一、sass介绍 (一) SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计...
    锋享前端阅读 1,466评论 0 3