发表于: 2020-06-05 23:39:35
1 1551
今天完成的事情:Nginx的学习,代理把我搞太久了,做了些深度思考
明天计划的事情:明天把深度思考做完,然后收拾提交任务二。
遇到的问题:1. nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
https://www.cnblogs.com/chenmingjun/p/10052205.html
收获:
Nginx代理
nginx关闭
nginx -s (stop 强制重启)(quit 优雅停止)(reload 重新加载)
代理:java设计模式中定义,给某个对象一个代理对象,由代理对象控制原对象的引用。类似于买房中介。
正向代理代理客户端,反向代理代理服务器
正向代理:意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。典型的正向代理是用户知道并使用的代理方式。
反向代理:客户端对代理是无感知的,因为客户端不需要任何配置就能访问,只需要发送请求到反向代理服务器就能获得目标服务器的资源(反向代理服务器还是去目标服务器请求的资源,只是对于客户端而言,看不见而已),此时对外,反向代理服务器和目标目标服务器就像是一个服务器,暴露的是反向代理服务器地址,隐藏的是目标服务器IP。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
然后就实现一下简单的代理吧。
任务2-18 配置Nginx,配置域名指向Resin,本地配置Host,通过域名在浏览器,Postman等测试数据
1.需要配置的是conf/nginx.conf server模块和location模块,这儿容易搞混,我绕了很久,就是不知道哪个是代理的服务器地址,哪个是目标服务器地址。https://www.cnblogs.com/hanmk/p/9289069.html,这个博主的让我成功实现。
server模块:配置虚拟主机的相关参数,一个http可以配置多个server
location模块:配置请求路由,以及页面处理情况
首页我的是远程阿里云服务器地址http://120.25.222.150/,安装了resin和nginx的,resin我的访问端口是8088.
2.在server块中修改,并修改location
listen和server_name配置的是客户端要输入的代理地址
location配置的是目标服务器的信息
我不走代理,直接访问resin项目的地址
下面是我走代理的访问路径,走代理我是更改端口为8089了
nginx.conf配置页面的解析
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
深度思考
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
mvc即是模型(model)-视图(view)-控制器(controller)的缩写,作为一种架构模式,用一种业务逻辑、数据、界面显示分离的方法组织代码。
通常模型对象负责在数据库中存取数据。
通常视图是依据模型数据创建的。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
最典型的MVC模式为:jsp+servlet+javabea
MVC模式在Spring MVC框架的应用
一个正常工作的 Spring MVC框架由下面几个部分组成:
1). DispatcherServlet前端控制器
2). 处理器映射器
3). 处理器适配器
4). 业务逻辑处理器(Model-controller)
5). 视图解析器
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
参数校验是对前后端的数据进行限制为规定的标准,前端的有邮箱,必填项,密码强度,手机号,便于提升用户体验,减少服务器压力,节省流量。后端则是唯一性验证,验证码,防止有恶意破环数据库结构。
JSR-303
JSR-303是Java为Bean数据合法性校验所提供的标准框架,它已经包含在JavaEE 6.0中。JSR-303通过在Bean属性上标注类似于 @NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证
JSR-303定义了一套可标注在成员变量、属性方法上的校验注解,
@Null 被注解的元素必须为null
@AssertTrue 被注解的元素必须为true
@AssertFalse 被注解的元素必须为false
@Max(value) 必须为数字,其值必须大于指定的最大值
@Size(max=, min=) 被注解的元素的大小必须在指定的范围内
@Past 被注解的元素必须是一个过去的日期
@Future 被注解的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator是JSR-303的一个参考实现,它除了支持所有标准的校验注解外,还支持一些扩展注解
@Email 被注解的元素必须是电子邮箱地址
@Length(min=,max=) 被注解的字符串的大小必须在指定的范围内
@NotBlank 验证字符串非null,且长度必须大于0
@Range(min=,max=) 被注解的元素必须在合适的范围内
3.SpringMVC分页查询和显示
一次性把数据全部查询出来很耗费内存,不利于GC,而且不方便查看。
分为逻辑分页和物理分页。
逻辑分页:数据库查询出全部数据,被程序员放在list中,返回在Session中,等待手动编写分页显示。
物理分页: 数据库使用limit关键词,限制查询的条数,limit start,size
start:从第几条记录开始,起始行号
size : 读取几条记录。
首先需要知道,从第几条[下标]开始读,要往后读取多少条。
即分页显示的话,需要传给sql语句两个参数,某一页面中第一条在表中的下标,以及页面中数据的条数。
size:默认指定一个,或者从前台输入后取一个。
start下标:前端传过来要跳转到的页码,后台sql中加入(pageNum-1)*size的计算,即为对应页面的start下标值。
每页的起始行号(beginRownum) = 当前页数(pageNum - 1)* 每页条数(pageRows)
beginRownum = (pageNum - 1) * pageRows;
总条数(totalRows)/每页条数(pageRows)=总页数(totalPages)有无余数 url中传值负数跳页面
totalPages = totalRows % pageRows == 0 ? totalRows / pageRows : (totalRows / pageRows) + 1
评论