发表于: 2020-06-12 21:16:36
1 1835
今天完成的事情:接口开发完成,完成了项目的环境搭建,完成部分深度思考。
明天计划的事情:开始开发模块。
遇到的问题:暂无
收获:
作品接口,查询要分页
接口功能
- 作品插入接口
请求URL:
- POST
/picture
参数:
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
catalog_id | 目录id | Integer | 是 | |
author_id | 作者id | Integer | 是 | |
name | 作品名称 | String | 是 | |
intro | 作品简介 | String | 否 | |
priority | 优先级 | Integer | 0为最高,代表精选留言 | 是 |
image | 图片链接 | String | 是 | |
createAt | 创建时间 | long | 是 | |
updateAt | 修改时间 | long | 是 | |
createBy | 创建人 | String | 是 | |
updateBy | 修改人 | String | 是 |
返回参数
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
code | 响应码 | number | 是 | |
message | 信息 | String | 是 |
返回示例
{
"code": 201,
"message": "picture创建成功!"
}
接口功能:
- picture查询
请求URL:
- get
/picture
请求参数
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
pageSize | 每页返回条数,默认为10 | Integer | 是 | |
pageNum | 当前页数,默认1 | Integer | 是 |
返回参数
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
code | 响应码 | number | 是 | |
message | 信息 | String | 是 | |
data | 集合对象 | object | 是 |
data:
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
totalNum | 总条数 | Integer | 是 | |
pageNum | 当前页数 | Integer | 是 | |
totalPage | 总页数 | Integer | 是 | |
id | 作品id | Integer | 是 | |
catalogId | 目录id | Integer | 是 | |
authorId | 作者id | Integer | 是 | |
name | 作品名称 | String | 是 | |
intro | 作品简介 | String | 是 | |
image | 图片链接 | String | 是 | |
createAt | 创建时间 | long | 是 | |
updateAt | 修改时间 | long | 是 | |
createBy | 创建人 | String | 是 | |
updateBy | 修改人 | String | 是 |
返回示例
{
"code": 202,
"message": "banner查询成功!",
"data": {
"totalNum":"20",
"pageNum","1",
"totalPage":"5",
"list":[
"id":"1",
"catalogId","1",
"authorId":"1",
"Name","迷失的路",
"intro":"迷失的人,愿你重归故里!",
"image","http://test3.com/1.jpg",
"create_at","20200614",
"update_at":"20200615",
"create_by":"梦里的诗人",
"update_by","梦里的诗人"
]
}
}
接口功能:
- picture修改
请求URL:
- put
/picture/{id}
请求参数
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
name | 作品名称 | String | 是 | |
intro | 作品简介 | String | 是 | |
image | 图片链接 | String | 是 | |
updateAt | 修改时间 | Integer | 是 | |
updateBy | 修改人 | String | 是 |
返回参数
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
code | 响应码 | number | 是 | |
message | 信息 | String | 是 |
返回示例
{
"code": 203,
"message": "picture修改成功!"
}
接口功能:
- picture删除
请求URL:
- delete
/picture/{id}
请求参数
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
id | id | Integer | 是 |
返回参数
参数名 | 说明 | 类型 | 备注 | 是否必填 |
---|---|---|---|---|
code | 响应码 | number | 是 | |
message | 信息 | String | 是 |
返回示例
{
"code": 204,
"message": "picture删除成功!"
}
25.什么叫反向代理?为什么要使用反向代理?
正向代理代理的对象是客户端,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求
反向代理代理的对象是服务端,它隐藏了真实的服务端
1.保证内部服务器的安全,因为隐藏了内部服务器,外部可见的是代理服务器的IP和端口,信息资源又是放在内部服务器。
2.负载均衡,加快的内部服务器的访问速度,部署多个反向代理服务器,让不同的服务走不同的代理服务器,而且代理服务器还提供缓存功能也加快了用户的访问速度。
3.节约有限的IP资源
26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
Nginx是一个高性能的HTTP和反向代理web服务器,同时也是电子邮件代理服务器,具有速度快,高性能,高可靠性,低内存消耗等特点
Lighttpd基本上和Nginx同质。
Nginx提供
反向代理:是指用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外的表现就是一个Web 服务器。充当反向代理服务器也是Nginx的一种常见用法(反向代理服务器必须能够处理大量并发请求)。
动静分离:由于Nginx 具有“强悍”的高并发高负载能力,因此一般会作为前端的服务器直接向客户端提供静态文件服务,用Apache、Tomcat等服务器来处理动态资源,实现动静分离。
负载均衡:作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指选择一种策略,尽量把请求平均地分布到每一台上游服务器上。
27.为什么要用start.sh,stop.sh,deploy.sh 来完成容器的启动,停止和部署,而不是直接用容器自带的命令?
因为脚本部署比较快,方便管理,能够随时部署,不消耗时间。
改动方便,脚本语言可以很好的改动,比较灵活。
如果使用容器自带的命令也可以,但是每个web容器都有自己的规范和配置,所以不方便管理(多项目情况下)。而且容器自带的都是自己默认的属性,更何况有的(比如jetty)还能使用java命令部署,不统一,而且依赖java运行而运行。
28.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
Filter
就是过滤器,依赖Servlet容器,实现上基于函数回调,几乎对所有的请求进行过滤,过滤器的实例每次只在容器初始化时调用一次。
Filter 的使用:
(1)在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest,根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
(2)创建Filter 处理类,init方法、destory方法、doFilter方法,并在web.xml 文件中配置Filter
Interceptor
依赖于web框架,在Spring中依赖于SpringMVC框架。实现上基于java反射机制,AOP的运用。
通过实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter抽象类,重写preHandle()、postHandle()和afterCompletion()来对用户的请求进行拦截处理
执行顺序:监听器>过滤器>拦截器
Listener按照监听器可以分为三种类型:ServletContextListener 监听ServletContext对象,HttpSessionListener 监听Session对象,HttpRequestListener 监听Request对象
统计在线人数,利用HttpSessionListener;加载初始化信息,利用ServletContextListener;统计网站访问量实现访问监控
29.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
Annotation(注解),其实就是对类,方法,属性进行的一种标示,也是给JVM拿来解析的。
配置 <context:componet-scan /> 标签 加载Spring @Component @Service @Controller @Autowire @Resource @Required 注解
配置 <mvc:annotation-driven/> 加载MVC 使用的 @RequestMapping 等其他相关的注解。
30.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
2. MVC层次较为简单,而url映射也十分简单,哪个网址出错可以立即找到其映射类。
31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
1.欢迎首页
description:描述项目,可以不配
display-name:定义项目的名称,可以不配
welcome-file-list:用来定义首页的列表
2.命名和定制url,设置初始化参数
3. 设置过滤器
过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。
加载顺序为: listener >> filter >> servlet >> spring
加载顺序会影响对spring bean 的调用。
比如filter 需要用到 bean ,但是加载顺序是 先加载filter 后加载spring,则filter中初始化操作中的bean为null;
32.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
1.SpringMVC 的入口是 Servlet,而 Struts2 入口是 Filter
2.SpringMVC 会比 Struts2 稍微开些,SpringMVC 是基于方法设计,而 Struts2 是基于类,每次发请求都会实例化一个 ACTION。
3.SpringMVC 可以跟 Spring 无缝融合,开发效率比 Struts2 高。支持 JSR303,处理 ajax 的请求更方便。
4.但是 Struts2 的 OGNL 表达式使页面的开发效率相比 SpringMVC 更高
评论