目录
4.Http协议(Hyper Text Transfer Protocol)
7.Ajax(Asynchronous JavaScript and XML)
1.Web开发概述
web开发将开发的程序部署在服务器中,通过浏览器访问(http请求),在java后端开发接收,处理,响应
a:什么是服务器?
狭义:指的是一种软件,里面可以存放文件,别人也可以访问,服务器可以作出响应
广义:硬件(云服务器机房)+软件
他是一个容器(部署项目),是连接在用户程序之间的中间件
b:Apache软件基金会(Apache Software Foundation )
专门为运作一个开源软件项目的Apache的团体提供支持的非盈利性组织,Apache的tomcat服务器是一款免费的,支持java程序的小型服务器
2.Web开发环境搭建
下载安装tomcat—解压—设置Java_Home环境变量(JDK的路径)—启动服务器(进入bin目录中运行startup.bat)—访问服务器(IP+端口)—关闭服务器(bin目录中运行shutdown.bat)
创建并发布Web项目:创建java项目,添加Web功能
发布Web应用到服务器(自动将Web应用到Web到服务器下,需要在开发环境工具中tomcat进来)
3.servlet(Server Applet)
servlet:用javab编写的服务器
作用:接收用户发送的请求数据
调用其他的java程序来处理请求
根据处理结果向客户端做出响应
web.xml是web项目中的配置文件,在服务器启动时,由服务器加载读取,必须放在WEB-INF目录下
继承HttpServlet,我们的类就具备servlet功能(接收,处理,响应)
在web.xml中注册servlet,生成的对象名,只有一个,只创建一个servlet对象,
配置类的地址,由服务器来创建servlet对象,通过反射机制创建
生命周期:
a.构造方法 服务器在创建servlet对象时,调用构造方法,在第一次访问servlet或者服务器启动时,创建servlet对象,调用构造方法,只调用了一次;
b.init 初始化servlet,servletconfig用来获得servlet中的一些参数信息,如果没有什么可以初始化的内容,此方法可以不用重写,但是服务器会调用,只是会调用父类中的init();
C.service 提供服务,每次请求都会调用
里面有两个参数:HttpServletRequest 表示请求,客户端提交的数据,都封装在此对象中
HttpServletResponse 表示响应,用来为客户端响应数据
d.destroy 在servlet对象销毁前,会调用destroy(),一般是在关闭服务器,在此方法中,可以执行一些最终想要的操作,例如保存日志.......,如果没有,也可以不用重写,但是服务器还会调用,可以调用父类中的。
4.Http协议(Hyper Text Transfer Protocol)
客户端浏览器和服务器之间交换数据的过程
5.Http请求
在网页中点击超链接,提交表单都是向服务器端发送http请求
一个http请求,包含三个部分:
请求行:http请求方式,请求资源名称,http版本
请求头:包含请求地址,方式,客户端信息....由浏览器发送完成
请求体:post请求中的数据都爱请求体中
get方式:主要用于从服务器端获取数据,传递少量的数据,获取大量的数据,数据在地址中拼接携带的,是不完全的(相对于post)
post方式:只要用于向服务器发送数据,注册 ,登录,提交表单用post
post数据在请求体中存储,相对安全,且传输的数据量大,上传文件都是post
post请求中文接收时解码格式不是utf-8,接收前设置解码格式:
req.setCharatcterEncording("utf-8")
超链接是get请求
直接通过submit提交表单到后端服务器,这种方式属于同步提交,服务器响应回来的内容会将整个网页覆盖,会影响前端页面中的正常操作,在现在的前后端分离开发模式后,前端向后端发送请求,都是异步发送
何为异步发送?
异步发送本质是使用浏览器中提供的一个js对象,就是XMLHttpRequest,使用此对象异步向服务器发送请求,后端响应的内容更新到网页的某个标签上,整个过程页面不会被覆盖,不会刷新
getmethod() 得到客户机请求方式
getScheme() 请求协议
getRemoteAddr() 返回发出请求的客户机的IP地址
getServerName() 服务器名(IP或域名)
getServerPort() 服务器端口
getParameter(name)--string 通过name获得值
getParameterValues--string 通过name获得多值
前后端分离开发,前端一个服务器,后端是另一个服务器,在发送ajax请求时,浏览器有一个安全限制(默认是遵守同源策略)
6.Http响应
一个http响应代表服务器向客户端回送的数据,它包括:响应行,响应头,响应体
响应行:包含了http协议版本,以及用于描述服务器对请求的处理结果
HTTP/1.1(协议版本) 200(状态码) OK(状态码描述)
状态码:服务器和浏览器用于确定状态的固定数字号码
200:请求成功
302:请求重定向
400:语义有误,当前请求无法被服务器理解或请求参数有误
404:请求资源不存在,通常是路径写错了或者服务器资源删除了
500:服务内部错误(代码异常)
响应头:用于描述服务器的基本信息,以及数据描述
响应体:代表服务器向客户端浏览器回送的正文
7.Ajax(Asynchronous JavaScript and XML)
异步JavaScript和XML
使用Ajax,可以无刷新状态更新页面,并且实现异步提交
axios框架
get请求:
axios.get('/user?ID=12345')
.then(function (response) {
console.log(response);
})
post请求:
axios.post('/user', “name1=value1&name2=value2”)
.then(function (response) {
console.log(response);
})
响应结果格式
axios.get('/user/12345')
.then(function(response) {
console.log(response.data);//后端返回数据,默认为json格式
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
})
借助游览器存储用户信息
localstorage.setItem("k","v") 将数据可以长期存储在浏览器中,即使浏览器关闭了,也存在
sessionStorage.setItem("account",req.data.account) 在一次会话中存储数据,浏览器关闭,数据就消失了
8.跨域
只要请求协议,域名/ip,端口,有一个不同,就被视为跨域访问(跨服务器访问)
为什么要限制跨域访问?————因为安全问题,如果一个网页可以随意地访问另外一个网站的资源,那么就有可能在客户完全不知情的情况下出现安全问题
解决办法————前端解决,后端解决:在响应头中,向前端浏览器响应一个允许接收的标志
如何将后端更多的信息,传递到前端去,json是一种轻量级的数据交换格式,已经成为前后端数据交换的规范,
java对象——json格式(字符串)——前端js(转为js对象)
axios可以直接将后端相应的json字符串转为js对象
9.Web会话跟踪机制
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束
(1)会话(session)
用来跟踪用户的整个会话,常用的会话跟踪技术是cookie和session
cookie:通过在客户端记录信息确定用户身份
session:通过在服务器端记录信息确定用户神扥
req.getSession():获得session,第二次请求中,没有会话id,新建一个会话对象,之后的请求中,如果没有会话id,去找对 应id的session对象
session.setAttribute("user",user) 在后端的session对象中存储用户信息,服务器会响应会话id
登陆成功后,开始了与后端服务器的会话,此时生成HttpSession对象
session.getMaxInactiveInterval() session对象最大有效非活动时间,以秒为单位,tomcat默认是30分钟不使用,就会销 毁session
session.getId() 获得session对象的编号
session.isNew() 判断一个session是不是一个新创建的会话对象、
(2)会话对象(HttpSession)
session对象用于在服务器端存储用户信息,会话id作为客户端与服务器之间身份识别
会话对象生命周期:开始与成功连接到后端服务,使用req.getSession()获得
销毁:
a.服务器关闭
b.到达最大的非活动时间,服务器会销毁
c.退出时,强制销毁session invalidate()
10.过滤器(Filter)
对服务器Web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)
servlet API中,与过滤器有关的API共有三个接口,分别是:Filter,FilterChain,FilterConfig