【春季启动】学习Spring的第一课

创建项目

image.png
image.png

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>

确认行动

image.png

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>

我原以为可以在这里查看日志,但因为没有在日志中输出堆栈跟踪的处理,所以这是不可能的。我在这里放弃了。

我不知道在哪里设置出了问题,所以不得不结束了。
下次我会重新创建项目并进行复仇。

广告
将在 10 秒后关闭
bannerAds