TestOps性能测试学习之第五天

2022-04-07 09:33:43 浏览数 (1)

跟着芒果一起好好学习,天天向上~

上周六是我们TestOps性能进阶课程第七天——互联网架构及微服务的学习。这一天的课程是由大名鼎鼎的六道老师为我们带来的,当然依旧是干货满满。老师带着大家了解spring框架,了解spring Framework的核心,了解IOC容器,带着大家一起使用spring MVC框架搭建web网站。这里芒果一如既往的抽出其中一部分内容跟大家介绍~

这里芒果第一个要给大家介绍的是使用配置XML文件方式使用容器

首先我们可以在我们的主目录下新建一个命名为beans的Package,用以保存我们新建的类,这里因为篇幅原因我就不介绍这些类的构建了,新建类如下图所示:

接着我们在resources目录下,新建一个applicationConfigure.xml文件来对容器的使用进行配置:

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="hello" class="com.testops.demo.beans.Hello"></bean>

    <bean id="car" class="com.testops.demo.beans.Car">
        <property name="brand" value="AUDI Q7"></property>
        <property name="price" value="500000.00" ></property>
    </bean>

    <bean id="car1" class="com.testops.demo.beans.Car">
        <constructor-arg name="brand" value="BMW i5"></constructor-arg>
        <constructor-arg name="price" value="400000.00" ></constructor-arg>
    </bean>

    <bean id="LiLei" class="com.testops.demo.beans.Person">
        <property name="name" value="LiLei"/>
        <property name="age" value="18"/>
        <property name="car" ref="car"/>
    </bean>

</beans>

如上面代码所示,我们可以通过bean标签把类交给spring框架管理,通过property标签或者constructor-arg为类成员赋值,完成属性注入(spring框架的控制反转IOC与依赖注入DI)。接着我们在主函数中加载applicationConfigure.xml,完成对类的实例化:

代码语言:javascript复制
public static void main(String[] args) {
   ApplicationContext context = new ClassPathXmlApplicationContext("applicationConfigure.xml");

   Hello hello = context.getBean("hello",Hello.class);
   hello.sayHello();

   Car car = context.getBean("car",Car.class);
   car.driving();

   Car car1 = context.getBean("car1",Car.class);
   car1.driving();

   Person lilei = context.getBean("LiLei",Person.class);
   System.out.println(lilei);
} 

芒果第二个要给大家介绍的是如何快速新建一个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函数进行处理:

代码语言:javascript复制
@Controller
public class DemoController {
    @RequestMapping("/demo")
    public void  showHello(HttpServletRequest request,HttpServletResponse response)throws Exception{
        response.setContentType("text/html;charset=utf-8");
        Writer writer = response.getWriter();
        String content = "<!DOCTYPE html>n"  
                "<html lang="zh-cn">n"  
                "<head>n"  
                "    <meta charset="UTF-8">n"  
                "    <title>欢迎学习Spring boot</title>n"  
                "</head>n"  
                "<body>n"  
                "    <h1>你好</h1>n"  
                "</body>n"  
                "</html>";
        writer.write(content);
        writer.flush();
    }
}

当@RequestParam 注解配合 @RequestMapping 一起使用,可以将请求的参数同处理方法的参数绑定在一起。如下面代码所示,当我们访问localhost:8080/thdemo或者localhost:8080/thdemo?name=testops(这里请求方法为GET方法,testops指代请求时name的确定值)时,响应将由thymeleafDemo函数进行处理。@RequestParam 带的值指定了需要被映射到处理方法参数的请求参数, 我们可以在响应函数中获取该参数,并进行处理,并返回thdemo.html页面。Controller代码如下所示:

代码语言:javascript复制
@Controller
public class DemoController {
    @RequestMapping(value = "/thdemo",method = RequestMethod.GET)
    public String thymeleafDemo(
            @RequestParam(value = "name",required = false) String name,
            Model model
    ){
        if(name != null && !name.trim().equals(""))
        {
            model.addAttribute("content",name);
        }else
        {
            model.addAttribute("content","world");
        }
        return "thdemo";
    }
}

对应的thdemo.html代码(这里我们采用了thymeleaf 的模板引擎)为:

代码语言:javascript复制
<!DOCTYPE html>
<html lang="ch-zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Thymeleaf</title>
</head>
<body>
    <h1 th:text=" 'Hello,'  ${content}   '!'"/>
</body>
</html>

我们也可以以同样的方式完成登录操作:当我们访问localhost:8080/login时,会由绑定的login函数进行响应。这里使用了@RequestParam 注解绑定了用户名username与密码password两个参数,并对用户名和密码进行了判断,其对应的视图模板为login.html。Controller代码如下所示:

代码语言:javascript复制
@Controller
public class LoginController {
    @Autowired
    private LoginService loginService;
    @RequestMapping(value = "/login",method = RequestMethod.POST)
    public String login(
            @RequestParam(value="username",required = false)String username,
            @RequestParam(value="password",required = false)String password,
            HttpSession session,
            Model model
            )
    {
        if (username==null || username.trim().equals("")) {
            model.addAttribute("result", "用户名为空");
        }else if(password==null || password.trim().equals("")){
            model.addAttribute("result","密码为空");
        }else{
            if (loginService.doLogin(username,password))
            {
                model.addAttribute("result","欢迎回来");
                session.setAttribute("isLogin",true);
                session.setAttribute("username",username);
            }
            else {
                model.addAttribute("result","用户名或者密码错误");
            }
        }

        return "login";
    }

    @RequestMapping("/")
    public String index(){
        return "index";
    }
}

Login.html对应的代码为(在页面中我们显示登录结果,并且设置了一个调整到返回首页的链接):

代码语言:javascript复制
<!DOCTYPE html>
<html lang="ch-zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h2 th:text="${result}"/>
    <a href="/">返回首页</a>
</body>
</html>

在处理登录操作时,我们会记住是否登录成功,使得返回首页之后能够保持登录状态,并记住用户名。当我们访问localhost:8080/login或者localhost:8080/index页面时,响应函数为index,对应的视图模板为index.html。在index.html中会进行判断,若登录成功,我们则直接调整到首页,否没有进行过登录操作,或者登录不成功,则显示登录输入框页面。index.html代码为:

代码语言:javascript复制
<!DOCTYPE html>
<html lang="ch-zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>TestOps</title>
</head>
<body>
<div>
    <th:block th:if="${session.isLogin}==null or ${session.isLogin}!=true">
        <form action="/login" method="post">
            <table>
                <tr>
                    <td><label for="username">用户名</label></td>
                    <td><input type="text" name="username" id="username" /></td>
                </tr>
                <tr>
                    <td><label for="password">密码</label></td>
                    <td><input type="password" name="password" id="password"/></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="登录" /></td>
                </tr>
            </table>
        </form>
    </th:block>
    <th:block th:if="${session.isLogin}">
        <h3 th:text="'会员:'   ${session.username}"></h3>
    </th:block>
</div>
<hr />
<h1>welcome to my class</h1>
</body>
</html>

当然这一天的学习内容肯定不止这么多,六道老师还对spring框架进行了介绍;对java web构建进行了介绍;对servlet转发翻译机制进行了介绍;在前面框架的基础上,使用druid进行数据库连接池管理,mybatis作为持久层框架,实现了数据库连接操作,对用户名、密码进行了验证等等。

0 人点赞