前提
在上一篇博文中,我们为我们的工程编写好了登录部分,然后构建得到了war包,本篇博文主要介绍如何将war包部署到服务器上,以及如何进行测试。
部署
将war包部署到服务器上之后,tomcat会对war包进行解包,生成一个同名的文件夹。部署需要进行以下的步骤:
- 将war包上传到服务器上:
- 如果服务器上只部署一个Web程序,上传路径为:%TOMCAT_HOME%/webapps/,删除ROOT文件夹,将你的war包改名为
ROOT.war
- 如果服务器上要部署多个Web程序,上传了为%TOMCAT_HOME%/webapps/ROOT,无需改名
-
启动tomcat
1)进入%TOMCAT_HOME%/bin:cd %TOMCAT_HOME%/bin
2)启动tomcat:./startup.sh
,看到Tomcat started
就表示tomcat已经成功启动。
-
我们看看tomcat解包的情况:
1)进入%TOMCAT_HOME%/webapps:cd %TOMCAT_HOME%/webapps
2)可以看到,我们的ROOT.war
包已经解出ROOT
文件夹了
-
关闭tomcat:想关闭tomcat的时候,进入%TOMCAT_HOME%/bin,
./shutdown.sh
即可关闭。
测试
到这里,我们已经完成了war包的部署,可以通过浏览器发起请求来测试我们的后端程序了。
测试1——测试服务器上的文件是否可被外网访问
一般情况下,我们可能先测试一下服务器上的文件(用户上传的或者后台写入的)是否可以被外网访问到,以进一步测试文件下载等功能。我们把文件放在Tomcat的ROOT目录下,就可以用服务器域名+“/”+“文件名(带后缀)”直接访问到文件:
将目标文件放在ROOT目录中
我们就以下面这张名为“cat.jpg”的萌猫图片文件为例
我们将这张图片上传到%TOMCAT_HOME%/webapps/ROOT下,启动Tomcat;之后打开浏览器,在地址栏里输入
http://服务器域名或ip/cat.jpg
如http://a.b.c.d:8080/cat.jpg
可以看见,服务器返回并打开了这张图片,这说明我们的文件是可以被外网访问到的。
测试2——用PC测Servlet是否可达
很多人不会自己测试服务器连接通不通,今天就补充一个简单的方法在这。
在创建了Servlet之后,可以先不急着写功能,用自动创建好的Servlet测试一下你的url是否可以到达你的Servlet。
比如,我创建了一个名为MyFirstWebApp的工程,里面有一个LoginServlet,里面会被自动写入这样一个函数:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet LoginServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet LoginServlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
这个函数其实就是在网页上写点东西,doPost和doGet函数默认调用它,这些代码我们暂时不需要改动。
关键部分到了,测试你的URL,比如我的URL就是:
//注意分享一里提到的localhost和外网IP或域名的区别!
http://a.b.c.d:8080/MyFirstWebApp/LoginServlet
输入到浏览器的URL框,回车之后我们看到
OK,现在你就可以在这个Servlet里面实现你的功能了。
测试3——拼Get请求用网页测试你的服务端
大家应该还记得,在《Java Web》那篇博文中,我说doGet方法这么写:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
也就是doGet调用doPost来处理请求。那么我们就可以使用Get请求方式拼接字符串来发送请求,测试我们的服务端。
我们在测试完分享2的LoginServlet之后,实现了它的功能,即只有账号username=imple
和password=123
时才返回登录成功,否则返回登录失败。
重点来了,此时我们打开浏览器,拼接出以下URL:
http://a.b.c.d:8080/MyFirstWebApp/LoginServlet?username=imple&password=123
注意中间接参数列表的问号(?)和两个参数中间的分隔符与号(&)不能忘
此时点击回车,页面会发生跳转显示以下输出信息:
看到这个输出信息表示登录成功,服务器一切正常。当然,看到failed也是正常结果,只是你记错了自己写定的账号密码罢了。
看到了其他的结果,就说明你的服务端有问题,根据不同的报错信息排查错误。
后记
写着写着,突然忘了还有什么要分享了,只有一条也是有些尴尬,但是没办法,等我想起来了再回来添上吧。
因为很多人不会测试服务器连接,今天添上了Servlet的请求测试。
——2018.03.11
客户端和服务端放在一起整体测试的时候,出了问题要判断问题出在哪会比较耗时,也不方便三言两语讲得清,因此今天添加了建立在分享2基础上的分享3。有了分享3,可以不先写服务端,不写客户端,把服务端测试正确了再写客户端,问题会少很多。
另外,大家也看到了,doGet方法极不安全,可以随意伪造请求。大家在测试完自己的Servlet之后,doGet方法里还是把调用doPost那一句删掉吧,也就是doGet方法留空,什么都不做。
——2018.05.05