【春季启动】学习Spring的第一课
创建项目
pom.xml的含义。
可以记录新加的库的依赖关系。
也可以手写在这里并进行添加。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
应用程序配置文件
写入数据库的连接信息。
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=kawai
spring.datasource.password=abcdefg
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.sql-script-encoding=utf-8
设置连接到数据库的名称、用户名和密码。
web.xml configuration file
在Tomcat的部署描述文件中。
可以在这里设置欢迎页面、错误页面和请求模式。
在过去,似乎在这里设置了每个请求URL与哪个类相关联的配置,但是在新的Java版本中,似乎不再需要这样的设置了。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID"
version="3.1">
<!-- 1)ウェルカムページ
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
-->
<!-- 2)エラーページ
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/index.html</location>
</error-page>
-->
<!-- 3)文字コードのエンコード -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 4)Spring MVCの設定 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- Spring-MVC設定ファイルを指定するー -->
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 5)リクエストパターン指定、コントローラをマッピングする -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
1) 欢迎页 yè)
当URL末尾只指定目录时,显示页面的设置。
2)错误页面
您可以配置页面以处理HTTP状态。
通过这样的设置,您可以将浏览器重定向至自定义的错误页面。
3) 文本编码
在创建视图时,应使用与字符编码相同的字符编码进行设置。
如果不这样做,可能会导致乱码。
4) Spring MVC的配置
声明使用Tomcat和SpringMVC吗?
设置SpringMVC配置文件的文件名。
5) 指定请求模式
可以指定请求模式。
这里特别指定是没有必要的,但是接受所有请求并不好,所以最好进行指定。
applicationContext.xml 的中文意思是“应用程序上下文.xml”。
以开始,并以结束。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- @Controllerなどのアノテーションを有効にするためのおまじない -->
<!-- //@RestControllerを使わなければこちらで問題ない
<mvc:annotation-driven />
-->
<!-- //@RestController 406エラー対策 -->
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<!-- Turn off working out content type based on URL file extension, should fall back to looking at the Accept headers -->
<property name="favorPathExtension" value="false" />
<property name="ignoreAcceptHeader" value="false" />
</bean>
<!-- @Autowiredステレオタイプアノテーションを有効にするためのおまじない -->
<!-- enable autowire -->
<context:annotation-config />
<!-- コンポーネントスキャンのおまじない -->
<context:component-scan base-package="controller"/>
<!--AspectJ 使用宣言 -->
<aop:aspectj-autoproxy />
<!--
//////////////////////////////////////////////////
// ここからは、 thymeleafを使用するための定義
//////////////////////////////////////////////////
-->
<!-- Thymeleaf テンプレートリゾルバの設定 -->
<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<!-- //2.x系はこちらでも動く
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
-->
<!-- テンプレートファイルのrootパス(webapp以下)-->
<property name="prefix" value="/WEB-INF/templates" />
<!-- テンプレートファイルの拡張子 -->
<property name="suffix" value=".html" />
<!-- DocType はHTML5 決まりごと(HTML4では動きません!) -->
<property name="templateMode" value="HTML5" />
<property name="cacheable" value="false" />
</bean>
<!-- Thymeleafテンプレートエンジンの設定 -->
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<!-- 上で定義した templateResolverに依存する -->
<property name="templateResolver" ref="templateResolver" />
</bean>
<!-- Thymeleaf View Resolverの設定 -->
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<!-- 上で定義したtemplateEngineに依存する -->
<property name="templateEngine" ref="templateEngine" />
<!-- 文字エンコードを指定(無いと、文字化けが発生する) -->
<property name="characterEncoding" value="UTF-8" />
</bean>
</beans>
1) 春季豆宣言
编写使用的bean定义。
2) 启用批注功能
为了启用在Spring MVC中使用的@Controller等注解的描述。
3) 激活 @Autowired
不宣布这个,就不能进行类的依赖注入。
4) 组件扫描声明
扫描组件,并为依赖注入声明部分。
如果在此处声明的包装中没有声明类,Spring-MVC将不会进行依赖注入。
5) Thymeleaf配置
前缀用于指定模板文件的存储位置。使用“/”表示webapp的子目录。
后缀用于指定模板文件的扩展名。如果指定为“html”,则在前缀目录下的html文件将被视为模板文件。
创建控制器
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/demo")
public class DemoController {
@GetMapping("/top")
public String demoTop(Model model) {
return "demo/index";
}
}
准备一个Controller。
通过添加@Controller注解,它将被识别为控制器。
似乎会在组件扫描中被注册到DI容器中。
@RequestMapping (请求映射)
可以定义哪个URL对应哪个方法执行处理。
这里指定了/demo。也可以指定多个。
另外,可以通过method=GET来指定访问方法。
@RequestMapping(method = RequestMethod.GET)
RequestMapping的method=GET等同于请求方式为GET。
如果使用PostMapping,也可以进行POST请求。
可能两种写法都可以。
创建视图
使用Thymeleaf插入代码。
<html xmlns:th="http://www.thymeleaf.org">
将上述内容添加到HTML中,即可使用。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>DEMO</title>
</head>
<body>
<h1 th:text=こんにちは。demoです。></h1>
</body>
</html>
确认行动
log4j2
可以选择在pom.xml文件中添加log4j2的配置,或者下载并放置jar文件。
log4j2.xml 日志配置文件
创建配置文件。
放置在WEB-INF下面。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>
<Properties>
<Property name="ptn">%d{yyyy-MM-dd HH:mm:ss.SSS} p=%-5p c=%c t=%t C=%C F=%F M=%M L=%L m=%m %n</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${ptn}" />
</Console>
<RollingFile name="file" fileName="log/log4j2.log"
filePattern="log/%d{yyyyMM}/log4j2_%d{yyyyMMdd}_%i.log">
<PatternLayout pattern="${ptn}" />
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="2 MB" />
<TimeBasedTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="10" />
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</Root>
</Loggers>
</Configuration>
我原以为可以在这里查看日志,但因为没有在日志中输出堆栈跟踪的处理,所以这是不可能的。我在这里放弃了。
我不知道在哪里设置出了问题,所以不得不结束了。
下次我会重新创建项目并进行复仇。