跟着芒果一起好好学习,天天向上~
上周六是我们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作为持久层框架,实现了数据库连接操作,对用户名、密码进行了验证等等。