JavaWeb笔记
目录
CS(client/server):客户端/服务器架构... 5
BS(browser/server1):浏览器/服务器架构... 5
Servlet中的init()方法通过反射创建对象... 21
<Load-on-startup>3<Load-on-startup>: 22
<url-pattern>*.my</url-pattern>匹配形式: 22
第四章:注解创建servlet与servletContext 24
response.getWriter().write()乱码解决方法... 30
第一章:HTTP请求与服务器
客户端与服务器
CS(client/server):客户端/服务器架构
特点:服务器当中主要就是一个数据库,把所有的业务逻辑以及界面交给客户端完成
优点:较为安全用户界面丰富,用户体验好
缺点:每次升级都要重新安装,针对不同的操作系统开发,可移植性差
BS(browser/server1):浏览器/服务器架构
特点:基于浏览器访问的应用,把业务层交给服务器完成,客户端仅仅做界面的渲染和数据的交换
优点:只开发服务器,可以跨平台,移植性强
缺点:安全性较低,用户体验差
WEB资源:
Web资源分类:
静态web网页:数据始终不变
动态web网页:数据由程序产生不同访问点看到的web界面各不相同
Web资源存放在哪:
存放在web服务器中,就是计算机安装了一个可以供外界访问资源的软件.web资源放到指定的目录当中,通过对应的端口号在浏览器中访问到.
URL地址:
协议://主机地址:端口号/资源地址
BS响应流程图:
HTTP协议:
什么是协议:
约束双方规范的一个准则
什么是HTTP协议:
超文本传输协议,是互联网上应用最广泛的一种协议
所有的www文件都必须遵守这个标准
设计HTTP协议的目的是为了提供一种发布和接收HTML页面的方法
约束请求与响应的规则
HTTP协议的组成:
请求
响应
请求与响应都是成对存在的
请求的发送方式:
- 通过浏览器的地址栏
- 通过html的form表单
- 通过a链接的href
- Src属性
常见的两种请求
GET
- GET方法向页面请求发送参数
- 地址和参数之间用?分隔
- 查询的字符串会显示在地址栏的URL中,不安全
- Get方法有大小限制,请求的字符串最多只能有1024个字符
- Get请求能够被缓存
- Get请求会保存在浏览记录中
- 可以添加书签
- 只能使用ASCⅡ字符类型,不能使用二进制流
- 点刷新时不会有反应
- Get请求主要用于获取数据
POST
- 查询字符串在post中单独存在,和HTTP请求一起发送到服务器
- 没有历史记录
- 参数类型没有限制,可以是字符串也可以是二进制
- 数据不会显示在地址栏,也不会缓存或保存在历史中(安全)
- 传输的数据量大,可以达到2M
- Post将数据传到服务器,get是从服务器获取数据
8种请求
HTTP请求:
1.请求行:
请求方式:get/post
请求的资源:www.xxxx.com
协议版本:
HTTP1.0 发送请求,创建一个连接,获得一个web资源,连接断开
HTTP1.1发送请求,创建一个连接,获得多个web资源,连接保持
2.请求头:
请求头是客户端发给服务器的一些信息,使用键值对表示key:value
常见的请求头:
3.请求体:
请求方式是post时,请求体会有请求的参数
请求反射是get时,请求参数不会出现在请求体中,会拼接在URL地址后
示意图:
HTTP响应:
1.响应行
http协议
状态码:
200:请求成功
302:重定向
304:资源未改变,访问本地缓存
404:资源不存在
500:服务器内部错误,通常程序抛异常
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
2.响应头
服务器将信息以键值对的方式返回给客户端
3.响应体
响应体是服务器写回给客户端的页面正文
浏览器将正文加载到内存然后解析渲染显示内容
示意图
第二章:Tomcat服务器
Java分类
JavaSE:
java的标准版,一般用来开发桌面应用程序.但是在桌面开发应用相对于VB,Delphi,vc++并没有什么优势
JavaEE
开发javaWeb应用程序,初级用JSP+servlet+javabena开发
JavaME
诺基亚手机运行的java程序就是用这个版本开发的程序,基本上淘汰了
JavaEE规范
JavaEE共有13个技术规范,sun公司定义了标准,其他公司根据这些标准去做javaEE程序(大公司做规范)
常见的javaWeb应用服务器
Weblogic:
oracle公司的大型收费服务器,支持全部javaEE规范
WebSphere:
IBM公司的大型收费服务器,支持全部javaEE规范
Tomcat:
Apache开源组织下的免费开源小型web服务器,支持javaEE中的servlet和JSP规范(可以通过第三方jar包扩充功能)
Tomcat的下载与安装
官网下载,一般用Tomcat7.0
目录介绍:
bin目录:存放脚本程序,可执行的命令
conf:配置目录,server.xml核心配置文件
lib:依赖库目录
logs:日志目录
temps:临时文件目录
webapps:web应用发布目录
work:Tomcat处理jsp的工作目录
运行Tomcat:
运行bin目录下的startup.bat文件
需要配置JAVA_HOME JRE_HOME CATALINE_HOME ptah路径
Tomcat启动速度优化
- 删除webapps多余的项目
- 将约束改为3.0版本,可以多一个选项
<absolute-ordering/> 表示不扫描jar包
3.在ROOT项目也加上<absolute-ordering/>这句话
配置文件Context:
用Tomcat发布项目是,在conf目录下的server.xml文件中会自动添加<Context />,一个Context表示一个项目
docBase:表示web应用存放的路径
path:表示浏览器地址栏写的名称
reloadable:字节码变化服务器是否重新加载web应用
Tomcat服务器体系结构:
- Server:整个servlet容器组合,可以包含一个或多个service
- service:一个或多个connector组成,以及一个engine,负责处理所有connector所获得的客户请求
- connector:客户端与程序交互组件,负责接收请求以及向客户端请求响应
- engine:处理连接器接收到的请求
- host:虚拟主机
- context:一个context对应一个Web application
虚拟主机
- 输入网址时,先到host文件中查找有没有对应的ip地址,有就直接访问
- 没有,就去外网找DNS服务器进行域名与IP地址的解析
- 多个域名可以访问同一个IP
- 一个IP对应一台计算机
安装Tomcat插件:
https://jaist.dl.sourceforge.net/project/tomcatplugin/net.sf.eclipse.tomcat.updatesite-2018-03-08.zip
第三章:servlet及其配置
什么是servlet:
Servlet是运行在服务器端的java小程序,是sun公司提供的一套规范(接口):1.servlet接收响应请求 2.filter过滤器 3.listener监听器
- 用来处理客户端请求,响应给浏览器的动态资源
- Servlet的实质就是java代码,通过java的API动态的向客户端输出内容
- 以后写的程序不在本地执行了,而是编译成字节码放到服务器上执行
- 以后编写程序时,不需要有main函数了,当前发送一个请求,服务器就会按照一定的规则调用编写的代码
反射:
什么是反射:在运行状态中对任意一个类,都能知道这个类的所有方法和属性,对于任意一个对象都能调用它的任意一个方法和属性.
这种动态的获取信息以及动态调用对象的方法称为java语言的反射机制.
类的加载时机:
当程序要使用某个类,如果该类还未加载到内存中,
系统会通过加载,连接,初始化三步实现对这个类进行初始化.
加载(将class文件读入内存,并为之创建一个class对象,任何类被系统使用时都会建立一个class对象) 连接(验证是否有正确的内部结构并与其他类协调一致,准备复制为类的静态成员分配内存,并设置默认初始化值) 初始化(初始化成员变量等)
加载时机:
- 创建类的实例
- 访问类的静态变量或为静态变量赋值
- 调用类的静态方法
- 初始化某个类的子类
- 使用反射强制创建某个类或接口对应的java.lang.Class对象
Servlet中的init()方法通过反射创建对象
Servlet生命周期:
Servlet默认第一次访问时被创建,可以通过配置文件设置服务器启动时就创建
Init:
Servlet对象创建时调用,默认第一次访问时创建
Service:
每次请求都会创建一次
Destroy:
Servlet对象销毁时执行,默认服务器关闭时销毁
<Load-on-startup>3<Load-on-startup>:
对象在服务器启动时就创建,数字代表优先级,数字越小,优先级越高
<url-pattern>*.my</url-pattern>匹配形式:
1.完全匹配
<url-pattern>/my</url-pattern>
2.目录匹配
<url-pattern>/aaa/*</url-pattern>
3.扩展名匹配
<url-pattern>*.my</url-pattern>
4.缺省匹配(备胎)
没有找到任何一个对应的url,就会找缺省的匹配
<url-pattern>/</url-pattern>
全局web.xml
对部署在服务器上的所有应用都有效,先在自己的工程中找web.xml配置,再去全局的web.xml中找配置
静态资源加载流程:
- 在path后面写静态路径名index.html或者其他.html都会去url-pattern中查看有没有匹配信息
- 如果就就加载对应的servlet,没有就去找缺省
- 如果自己的配置文件没有缺省的,就去全局配置的缺省找url-pattern
- 全局配置中有一个缺省的url-pattern对应的是default的servlet
- Defaultservlet会到当前访问的工程目录中去找对应名称的静态资源,如果有就把对应的内容逐行读出响应给浏览器
- 没有,404
第四章:注解创建servlet与servletContext
3.0版本的servlet:
创建一个servlet,上面会有一个@WebServlet(“/myServlet”)
这是一个注解,表示url-pattern的内容,不需要配置web.xml文件了
在web.xml中要有一个配置, metadata-complete="false",表示是否扫描类当中的注解,true不扫描,false扫描
什么是servletContext
ServletContext代表的是一个web应用的上下文对象,里面封装的是一个web应用信息,一个servletContext对应一个应用
ServletContext的声明周期:
服务器启动时创建,服务器关闭时销毁
如何获取上下文:
- 通过init()方法中的一个参数servletConfig来获取
- 直接在httpServlet中获取,this.getServletContext(),这种方法的本质还是通过servlet来获取的
ServletContext是一个域对象:
什么是域:能够存储数据
域对象:能够存储数据的对象就是域对象
ServletContext域对象的作用范围:
整个web应用,数据是共享的
向servletContext中写,取,删除数据:
Context.setAttribute(String name,Object value)
Context.getAttribute(String name)
Context.removeAttribute(String name)
第五章:response响应
Response响应过程:
设置响应行:
Response.setState(int code) 设置状态码
设置响应头:
SetHeader(String name,String value)
setIntHeader(String name,int value)
setDateHeader(String name,Date value)
重定向:
设置响应码:
Response.setStatue(302);
设置响应头:
Response.setHeader(“location”,”/servlet2”);
简单封装写法response.sendRedirect(“servlet2”);
定时刷新重定向:
Response.setHeader(“refresh”,”5;url=http://www.baidu.com”); //5秒后跳转到百度
设置响应体写字符信息:
方法一:write()方法
Response.getWrite().writer(“”)
方法二:通过OutPutStream来写:
String path = this.getServletContext().getRealPath("picture.jpg");
FileInputStream in = new FileInputStream(path);
//获取到servlet的字节输出流
ServletOutputStream out = response.getOutputStream();
byte[] b = new byte[1024];
int len = 0;
while((len = in.read(b)) != -1) {
out.write(b,0,len);
}
注意:getWrite()和getOutStream()不能同时调用
下载文件:
1.直接使用a标签去下载
有些内容浏览器会自动解析,浏览器不能解析的才会下载
<a href="/26-servlet/download/pic.jpg" >图片</a>
<a href="/26-servlet/download/music.mp3" >音乐</a>
<a href="/26-servlet/download/plan.txt" >小说</a>
2.发送servlet请求下载
<h1>servlet文件下载</h1>
<a href="/26-servlet/downloadServlet?filename=pic.jpg">图片</a>
<a href="/26-servlet/downloadServlet?filename=music.mp3" >音乐</a>
<a href="/26-servlet/downloadServlet?filename=plan.txt" >小说</a>
DownloadServlet类中的service方法
String name = request.getParameter("filename");
System.out.println(name);
//根据文件名来获取mime类型
String mimeType = this.getServletContext().getMimeType(name);
//设置mimetype
response.setContentType(mimeType);
//以附件形式打开
response.setHeader("Content-Disposition","attachment;filename="+name);
String path = this.getServletContext().getRealPath("download/"+name);
FileInputStream in = new FileInputStream(path);
ServletOutputStream out = response.getOutputStream();
byte[] b = new byte[1024];
int len = 0;
while((len = in.read(b)) != -1) {
out.write(b,0,len);
}
in.close();
乱码解决方法
写的内容存储在缓冲区,缓冲区使用的编码默认是ISO8859,此编码不支持中文,会产生乱码,解决方法
request获取name值属性乱码解决
get,post提交解决方法
String code = request.getParameter("code");
byte[] b = code.getBytes("ISO8859-1");
code = new String(b,"UTF-8");
post提交解决方法
request.setCharacterEncoding("UTF-8");
response.getWriter().write()乱码解决方法
response.setContentType(“text/html;charset=UTF-8”)
数据写入到数据乱码解决方法:
jdbc:mysql://localhost:33060/mysql?useUnicode=true&characterEncoding=utf-8
第六章:request请求
Request获取请求行
//1.获取请求方式 get post
String method = request.getMethod();
System.out.println(method);
//2.获取参数内容
String user = request.getParameter("user");
String password = request.getParameter("password");
System.out.println(user);
System.out.println(password);
//3.获取url uri
StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
System.out.println(url);
System.out.println(uri);
//4.获取get请求参数
String query = request.getQueryString();
System.out.println(query);
//5.获取当前web应用名称
String contextPath = request.getContextPath();
System.out.println(contextPath);
结果如下
request获取请求头
//1.获取到所有请求头的名称
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
System.out.println(headerNames.nextElement());
}
//2.根据名称获取指定头的头信息
String header = request.getHeader("referer");
System.out.println(header);
结果如下图
Referer
告诉服务器是从哪个页面过来的
Request获取请求体
//1.获取参数的多个值
String[] parameterValues = request.getParameterValues("user");
System.out.println(Arrays.toString(parameterValues));
//2.获取所有参数名称
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()) {
System.out.println(parameterNames.nextElement());
}
//3.获取所有的参数及值
Map<String, String[]> parameterMap = request.getParameterMap();
for(Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
System.out.println(entry.getKey()+"--"+Arrays.toString(entry.getValue()));
}
BeanUtils工具类:
使用别人定义的工具类将封装所有参数和值的Map存储到对象中
Map<String, String[]> parameterMap = request.getParameterMap();
User u = new User();
try {
BeanUtils.populate(u, parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(u);
请求转发:
//转发位置
RequestDispatcher dis = request.getRequestDispatcher("/servlet2");
//执行转发
dis.forward(request, response);
与重定向的区别:
重定向是response的方法,
请求转发是request的方法
第七章:cookie和session
会话技术:
用户打开浏览器浏览网页到关闭浏览器的过程称为一个会话.
用途:
保留各个客户端自己的数据
创建cookie:
Cookie cookie = new Cookie("cook", "meal");
response.addCookie(cookie);
cookie会以响应头的形式发给客户端,cookie只能存储非中文的字符串.
Cookie默认存储时间:
打开浏览器,关闭浏览器为一次会话,
如果不设置持久化时间,cookie会被存储在内存中,浏览器关闭存储信息销毁
设置cookie在客户端存储的时间:
Cookie.setMaxAge(int second);
如果设置持久化时间,cookie信息会被持久化到浏览器磁盘文件中,过期自动删除
设置cookie的携带路径:
默认情况下与cookie的web资源路径相同的路径都会携带cookie信息,
http://localhost:8080/car_demo/CookieServlet2,默认情况下http://localhost:8080/car_demo路径下的所有servlet都会携带cookie
三种:
Cookie.setPath(“/cookie/cookieServlet”) 指定一个,只有一个
Cookie.setpath(“/cookie) 设置当前工程都可以访问
Cookie.setpath(“/”) 访问服务器下部署的所有工程都会携带cookie
删除cookie:
创建一个同名的cookie把它的存储时间设置为0
Session:
Session是将数据存储到服务器端的技术,客户端每次携带一个ID去服务器端寻找属于自己的内存空间.session需要借助cookie存储客户的唯一标识SESSIONID
获取session:
HttpSession session = request.getSession();
有session直接返回session,没有则新建一个session
Session存取数据(也是一个域对象):
session.setAttribute("session", session);
session.getAttribute("session");
session.removeAttribute("session");
session的生命周期:
第一次执行request.getSession()时创建
销毁:(浏览器关闭时不销毁)
服务器关闭时
Session过期时(默认30分钟)
手动销毁: session.invadate()
注意事项:
Session写入时,将id从cookie中写到servlet中,但servlet关闭浏览器就销毁了,所以要给cookie手动设置JSESSIONID的值设置持久化时间
第八章:JSP
什么是jsp:
Java server page java服务器页面
在传统的HTML页面中,插入java程序段和jsp标记
其根本是一个简化的servlet
Jsp的工作原理:
Jsp在第一次访问时会被web容器翻译成servlet,
index.jsp -- index_jsp.java -- index_jsp.class
可以在Tomcat的work目录中找到
Jsp的组成:
静态数据:HTML等
Jsp脚本元素和变量
Jsp指令,如include指令
Jsp标签动作
用户自定义标签
Jsp脚本元素和变量:
在jsp中写java代码:
<%java代码%>
内部的java代码翻译到service方法内部
<%=java变量或表达式>
会被翻译成service方法内部out.println();
<%!java代码%>
会被翻译成servlet的成员内容
Jsp注释
Jsp注释:<%--注释内容--%>
只能在jsp源码中看到
Java注释://注释内容 /*注释内容*/
Jsp源码和翻译后的servlet代码可见
HTML注释:<!—注释内容-->
Jsp源码,servlet,网页都可见
Jsp指令
什么是指令:
Jsp指令用于设置整个页面的相关信息
以及jsp页面与其他容器之间的通信
Page指令(11个属性)
Include指令:
表示在jsp编译时插入一个包含文件或者代码的文件
Include指令所包含的文件名不能是一个变量url只能是静态的文件名
相当于引入一个界面
<%@ include file="/admin/regist.jsp" %>
标签动作:
页面包含:
<jsp:include page="/admin/regist.jsp"></jsp:include>
标签动作是动态包含:编译出3个class文件
include指令是静态包含.:编译出一个class文件
请求转发:
<jsp:forward page="/admin/login.jsp"></jsp:forward>
第九章:EL_JSTL表达式
什么是el表达式:
Express language(表达式可以嵌入在jsp内部)
减少jsp脚本代码的编写
作用
从四大域中获取数据:
${pageScope.page}
${requestScope.request }
${sessionScope.session }
${applicationScope.application }
El内置11个对象:
获取当前项目的名称:
${pageContext.request.contextPath }
El执行表达式:
内部可以运算,只要有结果直接在页面输出
${1+1 }
${empty page }
${session == request?true:false }
Jstl
什么是JSTL:
Jsp standard tag library(jsp标准标签库)
可以嵌入在jsp页面中使用标签的形式完成业务逻辑功能
Jstl标准标签库有5个字库:
导包及引入标签库:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
If语句:
<c:if test="${14 < 33 }">小于</c:if>
Foreach语句(遍历数组,集合,对象,map):
<c:forEach begin="1" end="5" var="a">
${a }<br>
遍历字符串集合:
遍历对象集合:
遍历map
第十章:Ajax,Json
ajax概念:
ASynchronous JavaScript And XML 异步的JavaScript 和 XML
1. 异步和同步:客户端和服务器端相互通信的基础上
* 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。
* 客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 [1]
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。提升用户的体验
2. 实现方式:
1. 原生的JS实现方式(了解)
//1.创建核心对象
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//2. 建立连接
/*
参数:
1. 请求方式:GET、POST
* get方式,请求参数在URL后边拼接。send方法为空参
* post方式,请求参数在send方法中定义
2. 请求的URL:
3. 同步或异步请求:true(异步)或 false(同步)
*/
xmlhttp.open("GET","ajaxServlet?username=tom",true);
//3.发送请求
xmlhttp.send();
//4.接受并处理来自服务器的响应结果
//获取方式 :xmlhttp.responseText
//什么时候获取?当服务器响应成功后再获取
//当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange。
xmlhttp.onreadystatechange=function()
{
//判断readyState就绪状态是否为4,判断status响应状态码是否为200
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//获取服务器的响应结果
var responseText = xmlhttp.responseText;
alert(responseText);
}
}
2. JQeury实现方式
1. $.ajax()
* 语法:$.ajax({键值对});
//使用$.ajax()发送异步请求
$.ajax({
url:"ajaxServlet1111" , // 请求路径
type:"POST" , //请求方式
//data: "username=jack&age=23",//请求参数
data:{"username":"jack","age":23},
success:function (data) {
alert(data);
},//响应成功后的回调函数
error:function () {
alert("出错啦...")
},//表示如果请求响应出现错误,会执行的回调函数
dataType:"text"//设置接受到的响应数据的格式
});
2. $.get():发送get请求
* 语法:$.get(url, [data], [callback], [type])
* 参数:
* url:请求路径
* data:请求参数
* callback:回调函数
* type:响应结果的类型
3. $.post():发送post请求
* 语法:$.post(url, [data], [callback], [type])
* 参数:
* url:请求路径
* data:请求参数
* callback:回调函数
* type:响应结果的类型
# JSON: 概念:
JavaScript Object Notation JavaScript对象表示法
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
var p = {"name":"张三","age":23,"gender":"男"};
* json现在多用于存储和交换文本信息的语法
* 进行数据的传输
* JSON 比 XML 更小、更快,更易解析。
2. 语法:
1. 基本规则
* 数据在名称/值对中:json数据是由键值对构成的
* 键用引号(单双都行)引起来,也可以不使用引号
* 值得取值类型:
1. 数字(整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true 或 false)
4. 数组(在方括号中) {"persons":[{},{}]}
5. 对象(在花括号中) {"address":{"province":"陕西"....}}
6. null
* 数据由逗号分隔:多个键值对由逗号分隔
* 花括号保存对象:使用{}定义json 格式
* 方括号保存数组:[]
2. 获取数据:
1. json对象.键名
2. json对象["键名"]
3. 数组对象[索引]
4. 遍历
//1.定义基本格式
var person = {"name": "张三", age: 23, 'gender': true};
var ps = [{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}];
//获取person对象中所有的键和值
//for in 循环
/* for(var key in person){
//这样的方式获取不行。因为相当于 person."name"
//alert(key + ":" + person.key);
alert(key+":"+person[key]);
}*/
//获取ps中的所有值
for (var i = 0; i < ps.length; i++) {
var p = ps[i];
for(var key in p){
alert(key+":"+p[key]);
}
}
3. JSON数据和Java对象的相互转换
* JSON解析器:
* 常见的解析器:Jsonlib,Gson,fastjson,jackson
1. JSON转为Java对象
1. 导入jackson的相关jar包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
1. readValue(json字符串数据,Class)
2. Java对象转换JSON
1. 使用步骤:
1. 导入jackson的相关jar包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
1. 转换方法:
* writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
* writeValueAsString(obj):将对象转为json字符串
2. 注解:
1. @JsonIgnore:排除属性。
2. @JsonFormat:属性值得格式化
* @JsonFormat(pattern = "yyyy-MM-dd")
3. 复杂java对象转换
1. List:数组
2. Map:对象格式一致
# 案例:
* 校验用户名是否存在
1. 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。有两种解决方案:
1. $.get(type):将最后一个参数type指定为"json"
2. 在服务器端设置MIME类型
response.setContentType("application/json;charset=utf-8");