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项目管理专家;测试技术布道者。依托于一切基于实际问题场景并解决实际问题的授课方式,力求穷尽解决学员提出的每一个问题。课程务实,理论知识体系丰富,技术功底扎实,受到学员的一致好评。

点击原文可以到达我们的课程链接哟~

TestOps|测试运维

精益技术 赋能过程

(0)

相关推荐

  • Spring-AOP核心

    前置-代理设计 我们先介绍相关的几种代理设计方法 1.静态代理 // 原始业务接口 public interface UserService { void login(String username, ...

  • TestOps性能测试学习之第八天

    跟着芒果一起好好学习,天天向上~ 上周六是我们TestOps性能进阶课程第八天--性能测试实战的学习.这一天的课程是由测试行业的大牛叶微微老师为我们带来的,必须是干货满满.老师教大家一起学习企业级的性 ...

  • TestOps性能测试课程学习之第六天

    跟着芒果一起好好学习,天天向上~ 上周六是我们TestOps性能进阶课程第六天--性能瓶颈与分析的学习.这一天的课程依旧是干货满满,云层老师从构建性能测试分析思路.性能瓶颈定位.常见性能分析模型.性能 ...

  • 【书法篆刻】学习书法的七道门槛

    让知识回家 一站式收藏您的阅读与创作 [书法篆刻] 学习书法的七道门槛     第一道门槛:描头画角,犹犹豫豫     起笔时心中无数,不能果断下笔,犹犹豫豫,结果写的字粗细不匀,修修描描.疗治此弊的 ...

  • 学习书法的七道门槛

    第一道门槛:描头画角.犹犹豫豫 起笔时心中无数,不能果断下笔,犹犹豫豫,结果写的字粗细不匀,修修描描.疗治此弊的方法是宁可重写一画一字,也不在原字上修修补补. 第二道门槛:盲目抄帖.死描僵临 取到一本 ...

  • 高一政治学习必须注意七个要点

    高一政治学习要为高考做准备,除了学习好知识,还要积累总结出适合自己的学习方法.所以高一很关键的一年,高一政治学习要抓住的几个方面: 1.课前要做到预习.每节课之前花十分钟对学案中的提示内容进行预习,对 ...

  • 【学习古时育儿七不责】1.对众不责,保护...

    [学习古时育儿七不责] 1.对众不责,保护孩子自尊: 2.孩子愧悔不责: 3.睡前不责: 4.饮食不责,否则易导孩子脾胃虚弱: 5.欢庆不责,孩子高兴时经脉畅通,若突然被责骂,经脉闭阻,对身体伤害很大 ...

  • 【热坛学习】关于七项补缩原则

    铸造微课堂 热加工行业论坛 前天 [热坛学习]关于七项补缩原则 约翰.坎贝尔在其名著<铸造原理>(中文版译名)中提出了补缩的七项原则,很多文章及平台都曾提到过,但实际上理解并遵从这些原则的 ...

  • 学习奇门遁甲的七个难点及突破方法

    释缘易学 弘扬中国易经传统文化,研究.传承和发扬传统易经文化精髓:传播正确的命运观.人生观和价值观,竭尽所能为促进中华民族"文化自信"贡献绵薄之力. 87篇原创内容 公众号 奇门遁 ...

  • Excel中VBA编程学习笔记(七)--窗口应用(WINDOW)

    Excel中VBA编程学习笔记(七)--窗口应用(WINDOW) 数据之道 2018-11-25 17:00:43  978  收藏 3 分类专栏: Excel 程序人生 文章标签: Excel VB ...