web开发概述
Web服务器是指驻留于因特网上某种类型计算机的程序
可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览; 它是一个容器,是一个连接用户与程序之间的中间件
Web服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、 WebLogic、Jboss等。
web前端:html,css,javascript,vue.js,ElementUI
web程序:网页(界面)服务器
前端作用
1.让用户输入数据
2.显示数据
web开发环境搭建
步骤
1.搭建后端服务器
2.前端向后端发送请求
3.后端处理,向前端进行响应
4.在前端动态显示数据
搭建后端服务器
以前的java程序都是在本地运行,在idea执行main()开始运行
从javaEE开始,后端程序都运行在服务器上
现在电脑上安装一个web服务器,把开发的java程序部署在服务器中,从前端通过网络访问
服务器
广义上讲:硬件+软件
狭义上讲:软件,是一款程序,里面部署资料(网页,java)
外界可以访问服务器中的文件,访问到之后,就可以向访问者响应文件
安装一款免费的有apache提供的服务器--tomcat服务器
下载
解压
配置环境变量(JAVA_HOME,可以自动根据JAVA_HOME自动找到jdk)
进入tommcat安装文件的bin目录,找到startup.bat启动tomcat
创建一个web后端项目,并将项目部署到tomcat中
1.创建一个java项目
2.为项目添加web功能
3.在idea中集成tomcat进来,并将web后端的项目部署到tomcat中
创建web后端程序(javaEE)
HttpServlet是javaEE中的一个类,servlet处理类必须继承此类,这样就具备了servlet程序功能,启动服务器时就会加载这些类
Servler创建和使用-Servlet配置
Servlet是Server Applet的简称,意思为用Java编写的服务器端的程 序. 它运行在web服务器中,web服务器负责Servlet和客户的通信以及调 用Servlet方法。
Servlet的作用:
1.接收用户发送的请求数据
2.调用其他的java程序来处理请求
3.根据处理结果,将结果响应给客户
搭建servlet程序:
1.搭建一个类集成HttpServlet
2.重写方法
3.在web.xml文件中配置servlet
由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被 外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文 件中使用<servler>元素和<servlet-mapping>元素完成
<servlet>元素用于注册Servlet,它包括两个主要的子元素
<sevlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和完整类名
一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定 Servlet的注册名称和Servlet的对外访问路径。
url-pattern配置模式:”/”代表当前web应用的根目录
Web.xml文件为web应用的配置文件,它必须放在web应用目录WEB-INF目录下。
Web.xml文件用于对web应用下的web资源进行配置,服务器在启动时会读取web.xml文件中的内容
Servlet生命周期
实例化
无参构造方法,初始化创建的对象
在第一次访问这个servlet时或服务器启动时,被调用,只调用了一次
初始化
init方法:在构造方法执行后,紧接着来实行,用来初始化servlet,只调用了一次,如果没有初始化需要,也可以不重写,会调用父类中的init方法
服务
service方法:提供服务,每次访问servlet程序都会执行,多次执行,提供一个用来封装请求和一个用来封装响应的对象
消亡
destory方法:在服务器关闭时会被调用,可以在服务器关闭时执行一些必要的操作,此方法在我们的类中可以不重写(调用父类中的destory方法)
http协议
超文本传输协议 (HyperText Transfer Protocol)服务器传输超文本 到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于 定义客户端浏览器和服务器之间交换数据的过程
HTTP是一个基于TCP/IP通信协议来传递数据,客户端与服务器交互必须建立连接
HTTP是一个属于应用层的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统.
浏览器连接服务器时,向服务器发送请求,称为http请求
一个http请求包含三个部分
请求行:请求的地址,http版本,状态码,都是由浏览器自动处理
请求头:包含主机地址,客户端的一些环境信息,以键值对的形式传递
请求体:表单post方式提交的数据区域,以键值形式传递
http请求分为GET请求方式和POST请求方式
GET:超链接请求,地址栏直接访问,主要用于从服务器端获取数据,向服务器端传输数据量小,且在地址栏显示
POST:表单post方式提交数据,主要用于从前端向后端传输大量数据(可上传文件),数据存放在请求体中,相对安全
请求和响应是Web交互最基本的模式,在Servlet中,用HttpServletRequest 来表示请求。HttpServletRequest :封装了请求的信息,可以从中获取任何请求信息
getParameter(name) --- String 通过name获得值
getParameterValues --- String[ ] 通过name获得多值
处理中文乱码 post setCharacterEncoding(编码格式)
getMethod()得到客户机请求方式
getScheme()请求协议
getRemoteAddr()返回发出请求的客户机的IP地址
getServerName()服务器名(ip或域名)
getServerPort()服务器端口
http响应
一个http响应代表服务器向客户端回送的数据,它包括:响应行,响应头,响应体。
响应行里包含了http协议版本,以及用于描述服务器对请求的处理结果。
HTTP/1.1 (协议版本) 200(状态吗) OK(状态码描述)
状态码:服务器和浏览器用于确定状态的固定数字号码
200:请求成功
302:请求重定向
400:语义有误,当前请求无法被服务器理解或请求参数有误
404:请求资源不存在,通常是路径写错了或者服务器资源删除了
500:服务内部错误(代码异常)
响应头用于描述服务器的基本信息,以及数据描述
响应体代表服务器向客户端浏览器回送的正文
Web服务器收到客户端的http请求,会针对每一次请求,分别创建 一个代表响应的HttpServletResponse对象。
HttpServletResponse对象代表响应
用getWriter()获得一个PrintWriter字符输出流输出数据
response会默认以ISO8859-1将需要输出到浏览器的字符进行解码, 如果输出的字符在ISO8859-1中不存在,就会导致乱码问题。
response.setContetnType("text/html;charset=utf-8");方法 可以同时设定response所使用的字符集编码和浏览器打开所用的字符集编码
过滤器
Filter也称之为过滤器,在请求进入servlet之前,可以配置那些请求进入到指定的过滤器,完成一些公共的处理,对服务器web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)
Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实 现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人 员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截
Servlet API 中,与过滤器有关的API共有三个接口,分别是
Filter
FilterChain
FilterConfi
Filter接口是过滤器类必须实现的接口,该接口中有三个方法。
init(FilterConfig filterConfig):该方法是对filter对象进行初始化 的方法,仅在容器初始化filter对象结束后被调用一次。参数 FilterConfig可以获得filter的初始化参数。
doFilter(ServletRequest request, ServletResponse response, FilterChain chain):该方法是filter进行过滤操作的方法,是最重 要的方法。过滤器实现类必须实现该方法。方法体中可以对request 和response进行预处理。其中FilterChain可以将处理后的request 和response对象传递到过滤链上的下一个资源。
destroy():该方法在容器销毁过滤器对象前被调用
该接口类型作为Filter接口中doFilter方法的参数使用。FilterChain接 口中有一个方法 doFilter(ServletRequest request,ServletResponse response), 该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能 是下一个过滤器,也可能是目标资源
作用
过滤器用来实现通用的功能,减少代码冗余,提高可维护性
一个过滤器可以配置给多个资源使用
一个资源也可以配置多个过滤器,按照配置顺序调用
前端发送请求
1. 表单向后端发送请求,属于同步请求
同步:发送一个请求,给一个回应,会用回应的内容覆盖掉浏览器中原来的内容
这样会打断前端其他的正常操作,在现在的前端中不太友好
2. 异步请求
异步:不同步 前端正常输入时可以同时与后端进行交互,后端相应的数据不会影响前端正常操作
可以使用一个js中提供的对象,向后端发送请求,服务器响应的内容,会被js对象接收
然后在js中,用接收到内容的,局部的更新网页,这样整个过程页面不会出现刷新,覆盖操作,不会打断页面的正常操作
前后端交互中出现一个跨域问题:
在前端的服务页面中(8848),接受后端服务器(8080)响应的数据
使用ajax技术前后端交互,前端默认会阻止,不让前端的服务接收其他后端的数据
为了安全性
协议,域名,端口有一个不相同就是跨域问题
跨域问题解决:前端解决,后端解决:在响应头中设置说明,告知浏览器,此次的响应是安全的
web会话追踪
会话
从从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这 个服务器结束,被称为一个会话.
目的
因为 HTTP 请求是无状态的;只有当用户发出请求时,服 务器才会做出响应,客户端与服务端之间的联系是离散的、非连续的;如果用户想在同一个网站的多个页面之间转换时,无法确定是否是同一个用户;对会话进行跟踪就是为了解决这样的问题。 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话过程。
给客户端们颁发一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了.
token
token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后, 服务器生成一个token便将此token返回给客户端,以后客户端只需带上这个token前来 请求数据即可。token保存在客户端,并且进行了加密,保证了数据的安全性.
①登录 向后端发送账号和密码
②后端与数据库连接验证账号密码
③如果账号正确,在后端生成一个token(令牌 唯一的),把token响应给前端
④在前端存储token
⑤之后的每一次请求,都将token携带者向后端发送
⑥后端的java对请求中的token进行解析验证
添加响应拦截器
axios.interceptors.response.use((resp) => {
if (resp.data.code == 500) {
ElementUI.Message({
message: resp.data.message,
type: "error"
})
}
if (resp.data.code == 401) {
ElementUI.Message({
message: "token验证失败",
type: "error"
})
router.replace("/login");
}
return resp;
})
对编码进行验证,根据编码返回响应