继上一节实验了一个基本的tomcat + nginx负载均衡效果后,这一节更进一步,完成以下两个内容的改进
- 动静分离
- web项目部署进tomcat
一、新建一个用来部署的maven web项目
首先用idea新建一个基本的maven web项目
这样就完成了一个基本maven单模块的web项目的搭建
下面在新增一个前台jsp页面和一个后台servlet处理类
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="hello" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td>
<input type="submit" value="登录">
</td>
<td>
<input type="reset" value="取消">
</td>
</tr>
</table>
</form>
</body>
</html>
HelloServlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* HelloServlet
* @author zhaoxing
* 2018年7月13日11:24:35
*/
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String userName = req.getParameter("username");
String passWord = req.getParameter("password");
resp.setContentType("text/html;charset=UTF-8");
PrintWriter printWriter = resp.getWriter();
printWriter.println("<html><body><h2>");
if ("admin".equals(userName) && "admin".equals(passWord)) {
printWriter.println("登录成功!欢迎您," + userName);
} else {
printWriter.println("用户名或者密码错误!");
}
printWriter.println("</h2></body></html>");
}
}
用maven打包(package)项目
在生成目录中看到已经生成了一个对应的war包
二、把步骤一打好的war包扔到Linux服务器$tomcat_home/webapp目录下
1. 首先把war包该成项目名,即HelloWorld.war
2. 分别上传到tomcat1和tomat2的webapp目录下
三、把静态资源文件放到nginx的资源路径下
[root@bogon HelloWorld-1.0-SNAPSHOT]# cd /usr/local/nginx/html/
[root@bogon html]# ls
50x.html images index.html
[root@bogon html]# ls images/
girl2.jpg girl.jpg
这里看到新建了一个图片目录,放了两张图片。
四、配置nginx,对动态资源和静态资源分别处理
之前开发web方面的程序时候我们习惯将html、css等资源文件也放置于Tomcat之中,用户发起访问后,tomcat需要将请求的这些静态资源文件一并返回给用户,这样如果同一个应用部署在多台tomcat服务器时,相同的静态资源在每个服务器上都有一份,增加了tomcat服务器的网络IO和磁盘空间,相当不合理。如果我们只讲JSP之类的请求交给tomcat,而反向代理服务器上存放静态资源,当用户请求静态资源时,前端反向代理服务器就可以直接将静态资源返回给用户,而不用去请求tomcat,一方面可以降低后端服务器的压力,一方面可以提高静态资源响应效率。
处理流程如下图所示:
配置如下:
upstream myTomcatServer {
server localhost:8080 weight=1;
server localhost:8081 weight=3;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ .*\.(js|css|png|jpg) {
root html;
expires 30d; #缓存30天
}
location / {
root html;
index index.html index.htm;
proxy_pass http://myTomcatServer;
}
}
使配置文件生效
[root@bogon nginx]# ./sbin/nginx -s reload
五、访问页面
直接访问还是会访问到tomcat下的index页
访问tomcat下部署的HelloWorld项目,通过nginx反向代理也可以正常访问
输入正确密码
输入错误密码
接下来直接访问静态资源,没问题(顺便看看美女放松下心情)