javaweb基础知识

JavaWeb笔记

 

目录

第一章:HTTP请求与服务器... 5

客户端与服务器... 5

CS(client/server):客户端/服务器架构... 5

BS(browser/server1):浏览器/服务器架构... 5

WEB资源: 6

Web资源分类: 6

Web资源存放在哪: 6

URL地址: 6

BS响应流程图: 7

HTTP协议: 7

什么是协议: 7

什么是HTTP协议: 8

HTTP协议的组成: 8

请求的发送方式: 8

常见的两种请求... 8

GET. 8

POST. 9

8种请求... 9

HTTP请求: 10

1.请求行: 10

2.请求头: 10

3.请求体: 10

示意图: 11

HTTP响应: 11

1.响应行... 11

2.响应头... 12

3.响应体... 12

示意图... 13

第二章:Tomcat服务器... 13

Java分类... 13

JavaSE: 13

JavaEE. 13

JavaME. 14

JavaEE规范... 14

常见的javaWeb应用服务器... 14

Weblogic: 14

WebSphere: 15

Tomcat: 15

Tomcat的下载与安装... 15

目录介绍: 15

运行Tomcat: 15

Tomcat启动速度优化... 16

配置文件Context: 16

Tomcat服务器体系结构: 17

虚拟主机... 18

第三章:servlet及其配置... 18

什么是servlet: 18

反射: 19

类的加载时机: 20

Servlet中的init()方法通过反射创建对象... 21

Servlet生命周期: 21

Init: 21

Service: 21

Destroy: 22

<Load-on-startup>3<Load-on-startup>: 22

<url-pattern>*.my</url-pattern>匹配形式: 22

1.完全匹配... 22

2.目录匹配... 22

3.扩展名匹配... 22

4.缺省匹配(备胎) 22

全局web.xml 22

静态资源加载流程: 23

第四章:注解创建servlet与servletContext 24

3.0版本的servlet: 24

什么是servletContext 24

ServletContext的声明周期: 24

如何获取上下文: 24

ServletContext是一个域对象: 25

第五章:response响应... 26

Response响应过程: 26

设置响应行: 26

设置响应头: 26

重定向: 27

定时刷新重定向: 27

设置响应体写字符信息: 27

方法一:write()方法... 27

方法二:通过OutPutStream来写: 27

下载文件: 28

1.直接使用a标签去下载... 28

2.发送servlet请求下载... 28

乱码解决方法... 29

request获取name值属性乱码解决... 29

response.getWriter().write()乱码解决方法... 30

数据写入到数据乱码解决方法: 30

第六章:request请求... 30

Request获取请求行... 30

//1.获取请求方式 get post 30

//2.获取参数内容... 30

//3.获取url uri 31

//4.获取get请求参数... 31

//5.获取当前web应用名称... 31

request获取请求头... 31

Referer 32

Request获取请求体... 33

//1.获取参数的多个值... 33

//2.获取所有参数名称... 33

//3.获取所有的参数及值... 33

请求转发: 35

第七章:cookie和session. 35

会话技术: 35

用途: 35

创建cookie: 35

Cookie默认存储时间: 36

设置cookie在客户端存储的时间: 36

设置cookie的携带路径: 36

删除cookie: 37

Session: 37

获取session: 37

Session存取数据(也是一个域对象): 37

session的生命周期: 37

注意事项: 38

第八章:JSP. 38

什么是jsp: 38

Jsp的工作原理: 38

Jsp的组成: 39

Jsp脚本元素和变量: 39

在jsp中写java代码: 39

Jsp注释... 39

Jsp指令... 40

什么是指令: 40

Page指令(11个属性) 41

Include指令: 41

标签动作: 42

页面包含: 42

请求转发: 42

第九章:EL_JSTL表达式... 42

什么是el表达式: 42

作用... 42

从四大域中获取数据: 42

El内置11个对象: 43

获取当前项目的名称: 43

El执行表达式: 43

Jstl 44

什么是JSTL: 44

Jstl标准标签库有5个字库: 44

导包及引入标签库: 44

If语句: 44

Foreach语句(遍历数组,集合,对象,map): 44

第十章:Ajax,Json. 46

概念:... 46

2. 实现方式:... 47

1. 原生的JS实现方式(了解)... 47

2. JQeury实现方式... 48

2. $.get():发送get请求... 49

3. $.post():发送post请求...

 

 

第一章:HTTP请求与服务器

客户端与服务器

CS(client/server):客户端/服务器架构

特点:服务器当中主要就是一个数据库,把所有的业务逻辑以及界面交给客户端完成

优点:较为安全用户界面丰富,用户体验好

缺点:每次升级都要重新安装,针对不同的操作系统开发,可移植性差

BS(browser/server1):浏览器/服务器架构

特点:基于浏览器访问的应用,把业务层交给服务器完成,客户端仅仅做界面的渲染和数据的交换

优点:只开发服务器,可以跨平台,移植性强

缺点:安全性较低,用户体验差

WEB资源:

Web资源分类:

静态web网页:数据始终不变

动态web网页:数据由程序产生不同访问点看到的web界面各不相同

Web资源存放在哪:

存放在web服务器中,就是计算机安装了一个可以供外界访问资源的软件.web资源放到指定的目录当中,通过对应的端口号在浏览器中访问到.

 

 

URL地址:

协议://主机地址:端口号/资源地址

BS响应流程图:

HTTP协议:

什么是协议:

约束双方规范的一个准则

什么是HTTP协议:

超文本传输协议,是互联网上应用最广泛的一种协议

所有的www文件都必须遵守这个标准

设计HTTP协议的目的是为了提供一种发布和接收HTML页面的方法

约束请求与响应的规则

HTTP协议的组成:

请求

响应

请求与响应都是成对存在的

请求的发送方式:

  1. 通过浏览器的地址栏
  2. 通过html的form表单
  3. 通过a链接的href
  4. Src属性

常见的两种请求

GET

  1. GET方法向页面请求发送参数
  2. 地址和参数之间用?分隔
  3. 查询的字符串会显示在地址栏的URL中,不安全
  4. Get方法有大小限制,请求的字符串最多只能有1024个字符
  5. Get请求能够被缓存
  6. Get请求会保存在浏览记录中
  7. 可以添加书签
  8. 只能使用ASCⅡ字符类型,不能使用二进制流
  9. 点刷新时不会有反应
  10. Get请求主要用于获取数据

POST

  1. 查询字符串在post中单独存在,和HTTP请求一起发送到服务器
  2. 没有历史记录
  3. 参数类型没有限制,可以是字符串也可以是二进制
  4. 数据不会显示在地址栏,也不会缓存或保存在历史中(安全)
  5. 传输的数据量大,可以达到2M
  6. 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启动速度优化

  1. 删除webapps多余的项目
  2. 将约束改为3.0版本,可以多一个选项

<absolute-ordering/> 表示不扫描jar

3.在ROOT项目也加上<absolute-ordering/>这句话

 

配置文件Context:

用Tomcat发布项目是,在conf目录下的server.xml文件中会自动添加<Context />,一个Context表示一个项目

docBase:表示web应用存放的路径

path:表示浏览器地址栏写的名称

reloadable:字节码变化服务器是否重新加载web应用

Tomcat服务器体系结构:

  1. Server:整个servlet容器组合,可以包含一个或多个service
  2. service:一个或多个connector组成,以及一个engine,负责处理所有connector所获得的客户请求
  3. connector:客户端与程序交互组件,负责接收请求以及向客户端请求响应
  4. engine:处理连接器接收到的请求
  5. host:虚拟主机
  6. context:一个context对应一个Web application

 

虚拟主机

  1. 输入网址时,先到host文件中查找有没有对应的ip地址,有就直接访问
  2. 没有,就去外网找DNS服务器进行域名与IP地址的解析
  3. 多个域名可以访问同一个IP
  4. 一个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监听器

  1. 用来处理客户端请求,响应给浏览器的动态资源
  2. Servlet的实质就是java代码,通过java的API动态的向客户端输出内容
  3. 以后写的程序不在本地执行了,而是编译成字节码放到服务器上执行
  4. 以后编写程序时,不需要有main函数了,当前发送一个请求,服务器就会按照一定的规则调用编写的代码

 

 

 

反射:

什么是反射:在运行状态中对任意一个类,都能知道这个类的所有方法和属性,对于任意一个对象都能调用它的任意一个方法和属性.

这种动态的获取信息以及动态调用对象的方法称为java语言的反射机制.

类的加载时机:

当程序要使用某个类,如果该类还未加载到内存中,

系统会通过加载,连接,初始化三步实现对这个类进行初始化.

加载(将class文件读入内存,并为之创建一个class对象,任何类被系统使用时都会建立一个class对象)     连接(验证是否有正确的内部结构并与其他类协调一致,准备复制为类的静态成员分配内存,并设置默认初始化值)      初始化(初始化成员变量等)

加载时机:

  1. 创建类的实例
  2. 访问类的静态变量或为静态变量赋值
  3. 调用类的静态方法
  4. 初始化某个类的子类
  5. 使用反射强制创建某个类或接口对应的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中找配置

静态资源加载流程:

  1. 在path后面写静态路径名index.html或者其他.html都会去url-pattern中查看有没有匹配信息
  2. 如果就就加载对应的servlet,没有就去找缺省
  3. 如果自己的配置文件没有缺省的,就去全局配置的缺省找url-pattern
  4. 全局配置中有一个缺省的url-pattern对应的是default的servlet
  5. Defaultservlet会到当前访问的工程目录中去找对应名称的静态资源,如果有就把对应的内容逐行读出响应给浏览器
  6. 没有,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的声明周期:

服务器启动时创建,服务器关闭时销毁

如何获取上下文:

  1. 通过init()方法中的一个参数servletConfig来获取
  2. 直接在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");

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值