[经验分享] 小项目部署经历
作者:精品下载站 日期:2018-04-14 03:27:10 浏览:3048 分类:涨姿势
之前本人照葫芦画瓢做了个大概的云笔记,后来巧合之下租了个阿里云的服务器,于是就开始了部署项目的折腾之路,这是我的博客https://codegitz.github.io/,欢迎指正
## 服务器环境准备
cloud_note是一个基于javaweb的项目,所以需要配置java环境,还有需要Tomcat启动服务,jdk我选择的是1.7.79,Tomcat7.0.23,然后就是安装,配置路径,这里就不多说了。
## 项目导出与部署
我使用的是eclipse,右击项目,export,导出war file
![[经验分享] 小项目部署经历](http://www.cdz423.com/content/uploadfile/201804/077294b8a8df243948663d06bc42a21820180413192811.jpg)
destination 选择你要导出的路径
![[经验分享] 小项目部署经历](http://www.cdz423.com/content/uploadfile/201804/cb50eb2c1cd0ef56e63d3a2150bbb58f20180413192811.jpg)
然后将war文件上传到服务器上,放到webapps目录下,Tomcat启动运行之后会自动生成一个与你war文件名对应的文件夹,里面就包含了你项目的所有东西,如图
![[经验分享] 小项目部署经历](http://www.cdz423.com/content/uploadfile/201804/0ebab5bc743df687c71856ba69e2d98520180413192811.jpg)
然后通过bin目录下的startup.bat启动Tomcat,可以在本地访问项目了。
值得一提的是,阿里云服务器需要在安全组开放对应的端口才可以访问,不然是无法访问的,例如启动Tomcat需要开放8080端口,还有数据库的3306端口也要开放
安全组--配置规则--添加安全组规则
![[经验分享] 小项目部署经历](http://www.cdz423.com/content/uploadfile/201804/193633be534fdc8129ce5e41a29abbdc20180413192812.jpg)
至此项目服务器部署已经完毕
## 问题
部署完毕后我发现用服务器的公网ip加项目名无法访问项目,而且控制台也没有报错,后来在浏览器发现是无法加载资源,经老三提醒后发现是js跨域的问题,找到了方向之后成功解决了这个问题。第一次部署,没有留意到跨域的问题,莫名了很久,终于解决了。
## js跨域
跨域访问,或者说 JavaScript 的跨域访问问题,是浏览器出于安全考虑而设置的一个限制,即同源策略。举例说明,当 A,B 两个网站属于不同的域时,如果来自于 A 网站的页面中的 JavaScript 代码希望访问 B 网站的时候,浏览器会拒绝该访问。
解决跨域方式有很多种,其中有jsonp,但是只能处理get请求。
所以我采用了CORS。
## CORS
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
### 简介
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
### 两种请求方式
浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request),浏览器对于两种请求的处理方式不一样。
满足以下两大条件就是简单请求
```
(1) 请求方法是以下三种方法之一:
HEAD
GET
POST
2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
```
java后台解决方法有两个:
#### 第一种
1.自己建一个corsfilter类
```
package io.codegitz.cloud_note.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class CorsFilter implements Filter{
//@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
//@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse)servletResponse;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");
filterChain.doFilter(servletRequest, servletResponse);
}
//@Override
public void destroy() {
}
}
```
预检请求会附带一些关于接下来的请求的信息给服务器,主要有以下几种:
Origin:请求的源域信息
Access-Control-Request-Method:接下来的请求类型,如POST、GET等
Access-Control-Request-Headers:接下来的请求中包含的用户显式设置的Header列表
服务器端收到请求之后,会根据附带的信息来判断是否允许该跨域请求,信息返回同样是通过Header完成的:
Access-Control-Allow-Origin:允许跨域的Origin列表
Access-Control-Allow-Methods:允许跨域的方法列表
Access-Control-Allow-Headers:允许跨域的Header列表
Access-Control-Expose-Headers:允许暴露给JavaScript代码的Header列表
Access-Control-Max-Age:最大的浏览器缓存时间,单位s
以上行为都是浏览器自动完成的,用户无需关注这些细节。如果服务器配置正确,那么和正常非跨域请求是一样的。
2.在web.xml文件中配置
```
filter
filter-namecors/filter-name
filter-classio.codegitz.cloud_note.filter.CorsFilter/filter-class
/filter
filter-mapping
filter-namecors/filter-name
url-pattern*.do/url-pattern
/filter-mapping
```
#### 第二种
这种方式似乎要spring4.2以上才支持,利用提供的jar包,下载 cors-filter-1.7.jar, java-property-utils-1.9.jar 这两个库文件放到lib目录下。(放到对应项目的webcontent/WEB-INF/lib/下),如果是maven项目,可以简单添加如下依赖到pom.xml中即可
```
dependency
groupIdcom.thetransactioncompany/groupId
artifactIdcors-filter/artifactId
version[ version ]/version
/dependency
```
接着添加CORS配置到web.xml文件中
```
!-- 跨域配置,此filter应该放在所有filter之前--
filter
!-- The CORS filter with parameters --
filter-nameCORS/filter-name
filter-classcom.thetransactioncompany.cors.CORSFilter/filter-class
!-- Note: All parameters are options, if omitted the CORS
Filter will fall back to the respective default values.
--
init-param
param-namecors.allowGenericHttpRequests/param-name
param-valuetrue/param-value
/init-param
init-param
param-namecors.allowOrigin/param-name
param-value*/param-value
/init-param
init-param
param-namecors.allowSubdomains/param-name
param-valuefalse/param-value
/init-param
init-param
param-namecors.supportedMethods/param-name
param-valueGET, HEAD, POST, OPTIONS/param-value
/init-param
init-param
param-namecors.supportedHeaders/param-name
param-valueAccept, Origin, X-Requested-With, Content-Type, Last-Modified/param-value
/init-param
init-param
param-namecors.exposedHeaders/param-name
!--这里可以添加一些自己的暴露Headers --
param-valueX-Test-1, X-Test-2/param-value
/init-param
init-param
param-namecors.supportsCredentials/param-name
param-valuetrue/param-value
/init-param
init-param
param-namecors.maxAge/param-name
param-value3600/param-value
/init-param
/filter
filter-mapping
!-- CORS Filter mapping --
filter-nameCORS/filter-name
url-pattern/*/url-pattern
/filter-mapping
```
配置完成之后可以发送另起一个项目或者页面来测试配置是否成功
```
!DOCTYPE HTML
html
head
meta charset="utf-8"
script type="text/javascript" src="scripts/jquery.min.js"/script
script type="text/javascript" src="scripts/basevalue.js"/script
script type="text/javascript"
$(function(){
//按钮单击时执行
$("#testAjax").click(function(){
//取Ajax返回结果
$.ajax({
url:path+"/test/ajax.do",
data:{},
dataType:"json",
type:"post",
success:function(result){
$("#myDiv").empty;
$("#myDiv").html(result.msg);
//显示Ajax返回结果
alert(result.msg);
},
error:function(){
alert("错误");
}});
});
});
/script
/head
body
div id="myDiv"h2返回跨域的文本/h2/div
button id="testAjax" type="button"点击获取Ajax跨域返回内容/button
/body
/html
```
浏览器输入http://47.106.120.224/cloud_note/Filter.html
成功返回文本跨域请求成功
![[经验分享] 小项目部署经历](http://www.cdz423.com/content/uploadfile/201804/1c8d5f7e23ced71a2cfc4b8d7e84910820180413192812.jpg)
## 小结
本次遇到的问题不大,都是没留意的小问题,倒是项目本身还有许多不完整的地方,bug多多,有时间再修改,源码稍后传到GitHub上,欢迎[star](https://github.com/codegitz/cloud_note)。
猜你还喜欢
- 02-18 [驾车常识] 这3种违章务必15天内处理,否则或面临罚金翻倍?这是真的吗?
- 02-18 [驾车常识] 等红灯时前车出毛病不动了,后车实线变道被记3分?交警会如何判罚你知道吗?
- 02-18 [驾车常识] 高速上这些“新路标”80%的车主看不懂,你是其中的25%的人吗?
- 02-18 [涨姿势] 开车被追尾,若对方全责,记得多说这3句话,或能多拿到几笔赔偿 ,知道了吗?
- 02-18 [驾车常识] 两车同时并线,发生事故到底谁负责?看完就懂了
- 12-14 [涨姿势] 古埃及神庙发现的可能是克利奥帕特拉七世的半身像
- 12-14 [涨姿势] 谷歌的新型量子芯片解决了最好的超级计算机需要宇宙年龄四万亿倍才能破解的问题
- 12-14 [涨姿势] 新研究揭示了古代“天空圆盘”是如何制造的,粉碎了它是赝品的说法
- 12-14 [涨姿势] 器官芯片显示,眼镜蛇毒液通过血管塌陷而致人死亡
- 12-14 [涨姿势] 2000年前的岩石艺术,包括近140英尺长的蛇,可能标志着哥伦比亚和委内瑞拉的古代领土
- 12-14 [涨姿势] 嵌入人类基因组中的“化石病毒”与精神疾病有关
- 12-14 [涨姿势] 美国最新一例人类 H5N1 禽流感病例是第一个引起呼吸道症状的病例
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag