发表于: 2017-07-15 20:04:28

1 906


今日完成

先把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加上

  1. <mvc:default-servlet-handler/>  

就可以了

负载均衡设置好了之后相同域名访问两个web容器,即使一个web挂了也没关系

收获

实现了Sping RMI 前后端分离

困难

time zone的问题,json taglib jar包问题,jetty访问带项目名称和localhost加端口号404错误问题,全部解决了。

明日计划

将Tuscany结束


返回列表 返回列表
评论

    分享到