发表于: 2017-07-15 20:04:28
1 907
今日完成
先把Spring RMI结一下
把原来任务5项目拆分成三个部分core service web
然后建立父工程和子工程
<modules>
<module>Task08-Core</module>
<module>Task08-Service</module>
<module>Task08-Web</module>
</modules>
StartServer.java
public class StartServer {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("Spring-mvc.xml");
StudentService service = (StudentService) ac.getBean("studentService");
System.out.println("server发布成功!");
}
}
然后在IDEA下先启动服务器
再用tomcat容器启动web服务
顺利访问页面json输出
中间启动顺序不能调换,否则会报错。然后遇到了timezone异常,改jdbc.properties可以纠正这个bug。
done!!!接下来是负载均衡配置两个web,两个service
我把service和web都复制做了两个
web随机访问两个service
import com.ptteng.model.Student;
import com.ptteng.service.StudentService;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Controller
public class StudentController {
int i = 0;
int j = 0;
int k = 0;
int l = 0;
private ApplicationContext ac = null;
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String getAll(HttpServletRequest request, HttpServletResponse response) {
ac = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
int flag = Math.random() > 0.5 ? 1 : 0;//使用random产生随机数0或1,如果是0则访问service1,如果是1则访问service2
System.out.println("产生的随机数是:" + flag);
List<Student> list = null;
try {
switch (flag) {
case 1:
StudentService studentService1 = (StudentService) ac.getBean("studentService");
i++;
System.out.println("第"+i+"次访问第一层service1");
list = studentService1.getAll();
break;
default:
j++;
StudentService studentService2 = (StudentService) ac.getBean("studentService2");
System.out.println("第"+j+"次访问第一层访问service2");
list = studentService2.getAll();
break;
}
} catch (Exception e) {
switch (flag) {
case 1:
k++;
StudentService studentService2 = (StudentService) ac.getBean("studentService2");
System.out.println("第"+k+"次访问第一层访问失败,转为第二层访问service2");
list = studentService2.getAll();
break;
default:
l++;
StudentService studentService1 = (StudentService) ac.getBean("studentService");
System.out.println("第"+l+"次访问第一层失败,转为第二层访问service1");
list = studentService1.getAll();
break;
}
}
request.setAttribute("list", list);
return "list";
}
}
和之前步骤一样先启动service服务,再启动web
实现了随机访问service1和service2
tomcat和jetty在两个端口都实现了随机访问service1和service2
关掉service1
不影响操作
web容器负载均衡的问题,jetty不能访问index.jsp。springmvc。xml加上
- <mvc:default-servlet-handler/>
就可以了
负载均衡设置好了之后相同域名访问两个web容器,即使一个web挂了也没关系
收获
实现了Sping RMI 前后端分离
困难
time zone的问题,json taglib jar包问题,jetty访问带项目名称和localhost加端口号404错误问题,全部解决了。
明日计划
将Tuscany结束
评论