部署javaweb到windows server过程中遇到的一些天坑

俗话说,万事开头难,然后中间难,最后结尾难。光连接到服务器就折腾了一番。

win10有很多奇奇怪怪的权限,在win10家庭版用远程工具登录的时候就遭遇了这样一个问题


出现身份验证错误,要求的函数不受支持 可能是由于CredSSP加密Oracle修正

网上提供了一个解决办法,打开组策略编辑器,

计算机配置>管理模板>系统>凭据分配>加密Oracle修正

选择启用并选择易受攻击>完成设置

于是我开心地win+R,运行gpedit.msc,结果发现本地并没有这个劳什子组策略

事实上我后来用win7根本就没有这些问题,远程直接就连上了,运行gpedit.msc组策略也可以打开,可能是因为是旗舰版的win7叭

怎么办?我就只有又想办法开启组策略

很幸运,一下就找到了很方便在win7、win10家庭版中开启组策略的方法

新建一个记事本,把下列代码复制到记事本

@echo off

pushd "%~dp0"

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt

for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"

pause

文件 - 另存为,保存类型选择所有文件,随便写个名字后把扩展名为“.bat”把它保存到桌面

找到刚刚保存的文件,右键以管理员身份运行,此时需要耐心等待一下,执行需要一段时间,需要耐心等待一下,执行完以后在命令窗口会提示你按任意键继续,按键后会自动关闭窗口

.bat文件在执行过程中不要关闭窗口 ,以免出现问题

执行完.bat文件以后,接下来就是见证奇迹的时刻了,win+R在运行“gpedit.msc”,你会看到组策略奇迹般地出现了

于是问题又来了!我打开计算机配置>管理模板>系统>凭据分配之后,发现并没有>加密Oracle修正这一项

很气,怎么办,只有继续想办法

幸好如参考办法炮制之后,修改了注册表之后,终于没有那个该死的oracle修正了

事实证明win10家庭版真的对于开发者相当地不友好,我也不只一次被奇奇怪怪的权限问题搞得抓耳挠腮

远程登录到服务器,安装并配置jdk1.8,tomcat7.0,理论上这两个就已经够了

然后项目打包导出.war文件,myeclipse和idea导出JEE项目都是很方便的(神器啊神器),export就行了

然后copy到tomcat的webapps下,理论上这个时候启动tomcat,部署就完成了,如果你在本机上已经把你的项目调教好了

验证了上传,检索——哦豁,完美。事实证明我还是太天真了,我才迎来了真正的suffering

项目是一个语料库平台,检索出语料——点击——新打开一个页面浏览

点击!咦?打不开?再点!再点!!再点!!!——始终没反应

然后看错误信息——最不想看到的——nullpointer

让所有java coder最头痛的空指针来了。

其实这里还有一个真正的问题,就是我的错误信息从myeclipse的控制台打印出来了,这是一件相当诡异的事情——我的浏览器地址栏分明是服务器ip:8080/项目名

当时的情况是这样的,我本机的mye自带的tomcat也在跑,浏览器上两个页面一个localhost一个是服务器ip(虽然跑的是同一个项目),远程连接着服务器,服务器上的tomcat也在跑。我现在还没搞清楚怎么就跟时空错乱一样,我在访问部署了的项目,产生了bug,信息输出到了本机mye的控制台。

为了强行解释一下这个问题我不得不又引入另一个问题,就是静态资源缓存的问题,在这次部署中我也遇到了

我们都知道浏览器是非常懒的,会给你缓存一堆静态资源,譬如图片,css、js文件。可能还会有其他的一些奇奇怪怪的类似于映射的东西,就为了下次访问这个站点的时候偷下懒

注意,由于知识有限这目前只是我的一个大胆猜测【捂脸】,为了强行解释刚刚那种时空错乱的情况,两台机器的tomcat都在跑而同时我又都在浏览器访问,其中本地的那个我之前测试经常访问浏览器肯定缓存了很多东西,这也就意味着很多东西是没有加载的,其中就包含了什么东西神奇地让我访问服务器上项目出现的bug被本机的mye的控制台打印了出来(准确点说,是跑到了我自己电脑的mye自带的tomcat的log目录下的日志信息里)

希望随着今后的学习有一天我可以知道这个bug产生的原因是什么【忧愁脸】

现在暂时就让他告一段落,因为事实上这个情况就出现了一次,后来在我清空了chrome的缓存之后就再也没有出现过,我也没有办法进一步去调试一下。

为什么要清chrome的缓存呢?还是刚刚静态资源缓存的问题,我修改了一些css样式,发布之后发现居然没有变化。于是就上网搜,发现虽然我替换了war包,但在浏览器中还缓存之前的静态资源,如不清除,则还使用之前的资源文件,可能就会产生资源访问错误。这种情况一般可通过对js,css等静态资源文件变更文件名来解决。像淘宝就是,css、js的引入是通过他们的CDN分布式形式,而且后面都带有?t=20150105。作用是标注版本号;用随机数防止缓存。

事实上不仅是前端的静态资源文件,在更新war包的时候,最好把tomcat的缓存也给清除,因为我就出现了debug完重新部署结果还是一样的错误,是因为tomcat也会缓存一些东西。

更新war包,不要嫌麻烦,先停止tomcat,删webapps下的war包,项目文件夹,把work目录下的catalina文件夹整个删除就好了,那个就是tomcat的缓存。删干净之后再加新的war包,再启动,之所以要停止的原因就是如果不停止你在加新的war包的时候tomcat又会加载一些你已经删除掉的项目留下的缓存,可能就会产生一些异常。像我就是报了一个Cannot serialize session attribute xxx for session的io异常(说法可能不太准确【捂脸】)

在我来来回回折腾了十几次war包之后,破项目终于老实了,我可以回到正常地处理之前的空指针的步骤了

当然中间还出过一个什么服务器连接池超时然后我还在服务器上折腾了一个Navicat发现连不上数据库那边的服务器(也是作孽把数据库放到室友的服务器上),甚至都ping不通吓得我赶紧去质问我室友是不是乱加了什么访问权限,结果最后发现——服务器登的是老师的校园网,老师在用结果给我挤下去了。

空指针异常出现在打开新页面浏览语料的过程中,具体点说,我用了一个很笨拙的方法来处理ajax跨域的问题,因为window.open打开的是一个新页面,是一个崭新的session,点击事件里我用ajax申请了一个servlet(暂时叫做a吧)传了一个这则语料的index,因为我的语料对象是放进一个ArrayList然后存到session里面,index则是该语料在集合的索引,a里面我getAttribute拿到语料之后存进数据库的一张表里,然后ajax的回调函数里再去window.open(),申请一个新的servlet(叫做b吧),b的里面从那张表里面取出数据,存进request再请求转发,跳转之前把数据从表里面删除。

$.ajax({
	type:"POST",
	url:"http://localhost:8080/CorpusV2.0/doBrowse",
	dataType:"text",
	data:{"order":order},
	success:function(result){
	    if(result=="success"){
	        window.open("http://localhost:8080/CorpusV2.0/openArticle");
	    }else{
		alert(result);
	    }
	}
});		
整个过程就是ajax -> a:取数据,存数据库 -> ajax -> b:数据库里面取出来,删除了再转发

可能已经有人发现问题了,然而我还是撒fufu地一遍遍测试,看着空指针从a里面getAttribute的那一行跳出来。

我在本机上测试没有问题,部署了之后在服务器的浏览器上访问也没有问题

唯独在我的机子上测试就有问题

我还在怀疑为什么session里的东西无缘无故地消失了,难道是ajax申请servlet都会换一个崭新的session吗?

诶问题就在于此,坏事就坏在那个localhost上

我访问服务器上的项目,点击的时候ajax却申请到了我本机上的servlet,当然有问题啊可不就是一个新的session吗(当然这是因为我的机器上有这么一个URL毕竟就是在这台机器上开发的,换一台机器自然又是404 not found了)

"http://localhost:8080/CorpusV2.0/doBrowse"

这个localhost——大错特错

改成绝对的ip

http://xx.x.xx.xx:8080/CorpusV2.0/doBrowse

以上

一箩筐的错误浪费了整整一天的宝贵的考研复习时间和好心情

猜你喜欢

转载自blog.csdn.net/chef51/article/details/80373403