TestOps性能测试学习之第七天
跟着芒果一起好好学习,天天向上~
上周六是我们TestOps性能进阶课程第七天——互联网架构及微服务的学习。这一天的课程是由大名鼎鼎的六道老师为我们带来的,当然依旧是干货满满。老师带着大家了解spring框架,了解spring Framework的核心,了解IOC容器,带着大家一起使用spring MVC框架搭建web网站。这里芒果一如既往的抽出其中一部分内容跟大家介绍~
这里芒果第一个要给大家介绍的是使用配置XML文件方式使用容器。
首先我们可以在我们的主目录下新建一个命名为beans的Package,用以保存我们新建的类,这里因为篇幅原因我就不介绍这些类的构建了,新建类如下图所示:
接着我们在resources目录下,新建一个applicationConfigure.xml文件来对容器的使用进行配置:
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
5
6 <bean id="hello" class="com.testops.demo.beans.Hello"></bean>
7
8 <bean id="car" class="com.testops.demo.beans.Car">
9 <property name="brand" value="AUDI Q7"></property>
10 <property name="price" value="500000.00" ></property>
11 </bean>
12
13 <bean id="car1" class="com.testops.demo.beans.Car">
14 <constructor-arg name="brand" value="BMW i5"></constructor-arg>
15 <constructor-arg name="price" value="400000.00" ></constructor-arg>
16 </bean>
17
18 <bean id="LiLei" class="com.testops.demo.beans.Person">
19 <property name="name" value="LiLei"/>
20 <property name="age" value="18"/>
21 <property name="car" ref="car"/>
22 </bean>
23
24</beans>
如上面代码所示,我们可以通过bean标签把类交给spring框架管理,通过property标签或者constructor-arg为类成员赋值,完成属性注入(spring框架的控制反转IOC与依赖注入DI)。接着我们在主函数中加载applicationConfigure.xml,完成对类的实例化:
1public static void main(String[] args) {
2 ApplicationContext context = new ClassPathXmlApplicationContext("applicationConfigure.xml");
3
4 Hello hello = context.getBean("hello",Hello.class);
5 hello.sayHello();
6
7 Car car = context.getBean("car",Car.class);
8 car.driving();
9
10 Car car1 = context.getBean("car1",Car.class);
11 car1.driving();
12
13 Person lilei = context.getBean("LiLei",Person.class);
14 System.out.println(lilei);
15}
芒果第二个要给大家介绍的是如何快速新建一个spring boot项目。
第一我们可以在https://start.spring.io/ 直接生成:
在这里我们可以选择项目种类(Maven或者Gradle),编程语言(Java、Kotlin或者Groovy),spring boot版本。同时可以对域名(Group)、Artifact、依赖库等进行配置。
第二我们可以直接生成一个spring boot项目,并对项目进行配置:
芒果接着要给大家介绍的是使用spring MVC实现web项目。
我们可以使用@RequestMapping的方式将 HTTP 请求映射到 MVC 和 REST 控制器的。如下面代码所示,当我们访问绑定的localhost:8080/demo页面,获得的响应将会由showHello函数进行处理:
1@Controller
2public class DemoController {
3 @RequestMapping("/demo")
4 public void showHello(HttpServletRequest request,HttpServletResponse response)throws Exception{
5 response.setContentType("text/html;charset=utf-8");
6 Writer writer = response.getWriter();
7 String content = "<!DOCTYPE html>\n" +
8 "<html lang=\"zh-cn\">\n" +
9 "<head>\n" +
10 " <meta charset=\"UTF-8\">\n" +
11 " <title>欢迎学习Spring boot</title>\n" +
12 "</head>\n" +
13 "<body>\n" +
14 " <h1>你好</h1>\n" +
15 "</body>\n" +
16 "</html>";
17 writer.write(content);
18 writer.flush();
19 }
20}
当@RequestParam 注解配合 @RequestMapping 一起使用,可以将请求的参数同处理方法的参数绑定在一起。如下面代码所示,当我们访问localhost:8080/thdemo或者localhost:8080/thdemo?name=testops(这里请求方法为GET方法,testops指代请求时name的确定值)时,响应将由thymeleafDemo函数进行处理。@RequestParam 带的值指定了需要被映射到处理方法参数的请求参数, 我们可以在响应函数中获取该参数,并进行处理,并返回thdemo.html页面。Controller代码如下所示:
1@Controller
2public class DemoController {
3 @RequestMapping(value = "/thdemo",method = RequestMethod.GET)
4 public String thymeleafDemo(
5 @RequestParam(value = "name",required = false) String name,
6 Model model
7 ){
8 if(name != null && !name.trim().equals(""))
9 {
10 model.addAttribute("content",name);
11 }else
12 {
13 model.addAttribute("content","world");
14 }
15 return "thdemo";
16 }
17}
对应的thdemo.html代码(这里我们采用了thymeleaf 的模板引擎)为:
1<!DOCTYPE html>
2<html lang="ch-zh" xmlns:th="http://www.thymeleaf.org">
3<head>
4 <meta charset="UTF-8">
5 <title>Thymeleaf</title>
6</head>
7<body>
8 <h1 th:text=" 'Hello,'+ ${content} + '!'"/>
9</body>
10</html>
我们也可以以同样的方式完成登录操作:当我们访问localhost:8080/login时,会由绑定的login函数进行响应。这里使用了@RequestParam 注解绑定了用户名username与密码password两个参数,并对用户名和密码进行了判断,其对应的视图模板为login.html。Controller代码如下所示:
1@Controller
2public class LoginController {
3 @Autowired
4 private LoginService loginService;
5 @RequestMapping(value = "/login",method = RequestMethod.POST)
6 public String login(
7 @RequestParam(value="username",required = false)String username,
8 @RequestParam(value="password",required = false)String password,
9 HttpSession session,
10 Model model
11 )
12 {
13 if (username==null || username.trim().equals("")) {
14 model.addAttribute("result", "用户名为空");
15 }else if(password==null || password.trim().equals("")){
16 model.addAttribute("result","密码为空");
17 }else{
18 if (loginService.doLogin(username,password))
19 {
20 model.addAttribute("result","欢迎回来");
21 session.setAttribute("isLogin",true);
22 session.setAttribute("username",username);
23 }
24 else {
25 model.addAttribute("result","用户名或者密码错误");
26 }
27 }
28
29 return "login";
30 }
31
32 @RequestMapping("/")
33 public String index(){
34 return "index";
35 }
36}
Login.html对应的代码为(在页面中我们显示登录结果,并且设置了一个调整到返回首页的链接):
1<!DOCTYPE html>
2<html lang="ch-zh" xmlns:th="http://www.thymeleaf.org">
3<head>
4 <meta charset="UTF-8">
5 <title>Login</title>
6</head>
7<body>
8 <h2 th:text="${result}"/>
9 <a href="/">返回首页</a>
10</body>
11</html>
在处理登录操作时,我们会记住是否登录成功,使得返回首页之后能够保持登录状态,并记住用户名。当我们访问localhost:8080/login或者localhost:8080/index页面时,响应函数为index,对应的视图模板为index.html。在index.html中会进行判断,若登录成功,我们则直接调整到首页,否没有进行过登录操作,或者登录不成功,则显示登录输入框页面。index.html代码为:
1<!DOCTYPE html>
2<html lang="ch-zh" xmlns:th="http://www.thymeleaf.org">
3<head>
4 <meta charset="UTF-8">
5 <title>TestOps</title>
6</head>
7<body>
8<div>
9 <th:block th:if="${session.isLogin}==null or ${session.isLogin}!=true">
10 <form action="/login" method="post">
11 <table>
12 <tr>
13 <td><label for="username">用户名</label></td>
14 <td><input type="text" name="username" id="username" /></td>
15 </tr>
16 <tr>
17 <td><label for="password">密码</label></td>
18 <td><input type="password" name="password" id="password"/></td>
19 </tr>
20 <tr>
21 <td></td>
22 <td><input type="submit" value="登录" /></td>
23 </tr>
24 </table>
25 </form>
26 </th:block>
27 <th:block th:if="${session.isLogin}">
28 <h3 th:text="'会员:' + ${session.username}"></h3>
29 </th:block>
30</div>
31<hr />
32<h1>welcome to my class</h1>
33</body>
34</html>
当然这一天的学习内容肯定不止这么多,六道老师还对spring框架进行了介绍;对java web构建进行了介绍;对servlet转发翻译机制进行了介绍;在前面框架的基础上,使用druid进行数据库连接池管理,mybatis作为持久层框架,实现了数据库连接操作,对用户名、密码进行了验证等等。
要想学习各种不一样的知识,大量的精髓,还是要参与到我们的课程中来哟~
文章最后介绍一下我们的六道老师:
六道 超过15年的软件测试从业经历;前华为高级测试工程师,互联网公司测试总监;ISTQB注册讲师;美国ASQ协会认证的质量工程师;PMP项目管理专家;测试技术布道者。依托于一切基于实际问题场景并解决实际问题的授课方式,力求穷尽解决学员提出的每一个问题。课程务实,理论知识体系丰富,技术功底扎实,受到学员的一致好评。
点击原文可以到达我们的课程链接哟~
精益技术 赋能过程