04_使用域名访问后台管理系统(Nginx)
1.现在的方式存在的问题
- 现在的访问路径:http://127.0.0.1:8080 (localhost:8080)
- 存在的问题
- 开发环境和测试环境ip不一样,每次环境变化时,都要修改访问地址
- 页面加载资源文件,有可能会使用url的全路径。一旦更换环境(ip),资源文件就无法加载了
- ip地址在访问的时候是没有意义的(只是用来定位服务器的地址,但是书写麻烦,而且在开发和测试上线时会变化),用户不会通过ip访问,一般通过域名访问
2.修改hosts配置,使用域名访问
2.1 可以通过修改hosts文件的方式,增加ip地址和域名的映射
-
hosts文件的地址:C:\Windows\System32\drivers\etc\hosts
-
添加自定义规则
-
浏览器使用域名访问测试
2.2 使用SwitchHosts管理
- 经常做域名映射的话,每次都去c盘中更改太麻烦了,使用SwitchHosts工具来管理
2.3 问题
- 实现通过域名访问后,还存在端口号的问题,用户是直接输入域名的,不会填写端口号
- nginx反向代理服务器
3.Nginx
3.1 Nginx介绍
- 我们可以使用Nginx反向代理,虚拟主机,负载均衡
4.2 反向代理
-
指代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。此时代理服务器对外就表现为一个反向代理服务器。
-
编辑配置文件,配置反向代理的地址:conf/nginx.conf
-
添加127.0.0.1:8080的代理
4.3 Nginx三个命令
-
启动:start nginx.exe
-
停止:nginx.exe -s stop
-
重载:nginx.exe -s reload
-
进入到nginx目录,输入cmd来启动nginx
- 任务管理器的详细信息中有这里线程
- 任务管理器的详细信息中有这里线程
4.4 浏览器测试
- 把swtichhosts和nginx中的域名前www.去掉
4.5 Nginx的访问流程
4.商品管理的删除
4.1 查看前端删除的操作
4.2 分析设计
- url:/item/delete
- 参数:params:{“ids”:ids} ids是一个id组成的数组
- 返回:自定义的结果对象,封装了含有status状态的属性
4.3 自定义响应结果
-
后面所有的ajax响应都是json对象并且含有status属性,我们就自定义个本项目的相应结果对象,专门处理增,删,改之后的响应结果
-
在common中创建一个pojo–DreamResult
package com.dream.common.pojo; public class DreamResult implements Serializable{ //状态码 定义为跟http响应的状态码的含义一样 200代表成功 private Integer status; //响应之后的提示 private String msg; //响应如果需要带数据,封装到data private Object data; /* * 提供几个静态工厂方法,用来返回结果对象同时设置响应结果 * */ //3、如果成功了 需要返回对象 public static DreamResult ok(Object data){ return new DreamResult(data); } //2、如果失败了,则自定义DreamResult对象 public static DreamResult build(Integer status,String name,Object data){ return new DreamResult(status,name,data); } //1、如果成功了但是没有数据要返回,直接调用ok方法代表成功 public static DreamResult ok(){ return new DreamResult(null); } //一旦返回有数据了,则代表肯定成功 public DreamResult(Object data) { this.data = data; this.status=200; this.msg="ok"; } public DreamResult() { } public DreamResult(Integer status, String msg, Object data) { this.status = status; this.msg = msg; this.data = data; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
4.4 完成controller
- Controller接收的参数不要是数组类型,要是集合类型才行
- 跨项目传输对象需要是集合,不能是数组,集合实现了序列化
- 跨项目传输对象需要是集合,不能是数组,集合实现了序列化