创建Web多模块项目(Maven管理)

前言

开发工具:IDEA

1 创建项目

1.1 创建根项目

File > New > Module...

切换路径 > File > Open > 新建项目路径

修改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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>maven_modules</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>maven_pojo</module>
        <module>maven_dao</module>
        <module>maven_service</module>
        <module>maven_controller</module>
        <module>maven_webapp</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spring.version>5.3.27</spring.version>
        <mybatis.version>3.5.9</mybatis.version>
        <mysql.connector.version>8.0.28</mysql.connector.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Core -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
            </dependency>

            <!-- Spring MVC -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <!-- MyBatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <!-- MySQL Connector -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.connector.version}</version>
            </dependency>

            <!-- Servlet API -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

1.2 创建子模块

1.2.1 创建pojo

根项目右键 > New > Module...

添加依赖

XML 复制代码
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.42</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

1.2.2 创建dao

根项目右键 > New > Module...

添加依赖

XML 复制代码
<dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>maven_pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.32</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.3.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.10</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.9</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.10</version>
        </dependency>
    </dependencies>

1.2.3 创建service

根项目右键 > New > Module...

添加依赖

XML 复制代码
   <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>maven_dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.10</version>
        </dependency>
    </dependencies>

1.2.4 创建controller

根项目右键 > New > Module...

添加依赖

XML 复制代码
  <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>maven_service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

1.2.5 创建webapp

根项目右键 > New > Module...

添加依赖

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>maven_modules</artifactId>
        <groupId>com.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>maven_webapp</artifactId>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>maven_controller</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8085</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

新建webapp文件夹

src/main/webapp/WEB-INF/web.xml

XML 复制代码
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

src/main/webapp/index.jsp

html 复制代码
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

1.3 设置maven配置

File > Settings > Build, Execution, Deployment > Build Tools > Maven

1.4 编译

1.5 启动测试

访问: localhost:8083

2 核心配置类

(maven_webapp模块)

2.1 创建ServletAnnoInitConfig.java

java 复制代码
package com.example.config;

import javax.servlet.Filter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ServletAnnoInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {SpringConfig.class};
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {SpringMvcConfig.class};
    }
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

2.2 创建SpringMvcConfig.java

java 复制代码
package com.example.config;

import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringMvcConfig {
}

2.3 创建SpringConfig.java

java 复制代码
package com.example.config;

import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {
}

3.过滤器与拦截器

3.1 ServletAnnoInitConfig.java

(maven_webapp模块)

java 复制代码
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[] {filter};
    }

3.2 SpringMvcConfig.java

(maven_webapp模块)

java 复制代码
package com.example.config;

import com.example.interceptor.ApiInterceptor;
import com.example.interceptor.LoginInterceptor;
import com.example.interceptor.PermissionInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@ComponentScan({"com.example.interceptor"})
@EnableWebMvc
public class SpringMvcConfig  implements WebMvcConfigurer {
    @Autowired
    private ApiInterceptor apiInterceptor;
    @Autowired
    private LoginInterceptor loginInterceptor;
    @Autowired
    private PermissionInterceptor permissionInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor).addPathPatterns("/&zwnj;**")
                .excludePathPatterns("/","/login"); //不拦截路径;
        registry.addInterceptor(permissionInterceptor)
                .addPathPatterns("/admin/**", "/user/**") // 拦截路径
                .excludePathPatterns("/user/login", "/user/register"); //不拦截路径
        registry.addInterceptor(apiInterceptor).addPathPatterns("/&zwnj;**"); // 参数用以来注入
    }
}

创建拦截器类(maven_controller模块)

实现接口HandlerInterceptor。// Spring5.3及以后继承HandlerInterceptorAdapter方式移除了

PermissionInterceptor

java 复制代码
package com.example.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
@Component
public class PermissionInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        response.getWriter().write("PermissionInterceptor Run");
        return true;
    }
}

LoginInterceptor

java 复制代码
package com.example.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
public class LoginInterceptor implements HandlerInterceptor {
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
                             Object handler) throws Exception {
        System.out.println("preHandle执行了");
        request.setAttribute("startTime", System.currentTimeMillis());
        Object user = request.getSession().getAttribute("user");
        if (user == null) {
            response.sendRedirect(request.getContextPath() + "/");
            return false; // 终止
        }
        
        return true; // 继续
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle执行了");
        if (modelAndView != null) {
            modelAndView.addObject("globalMsg", "请求成功");
        }
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion执行了");
        long startTime = (Long) request.getAttribute("startTime");
        long endTime = System.currentTimeMillis();
        System.out.println("运行时间" + (endTime - startTime) + "ms");
    }
}

ApiInterceptor

java 复制代码
package com.example.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
public class ApiInterceptor implements HandlerInterceptor {
    
    @Value("0:0:0:0:0:0:0:1")
    private String allowedIp;
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        String clientIp = request.getRemoteAddr();
        
        if (!allowedIp.equals(clientIp)) {
            response.setStatus(403);
            response.getWriter().write("Forbidden: IP not allowed");
            return false;
        }
        return true;
    }
    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
    }
    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
    }
}

4.控制器

4.1 创建控制器

(maven_webapp模块)

SpringMvcConfig.java

java 复制代码
package com.example.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan({"com.example.interceptor", "com.example.controller"})
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

}

4.2 创建控制器类

(maven_controller模块)

LoginController

java 复制代码
package com.example.controller;		
		
import javax.servlet.http.HttpServletRequest;		
import javax.servlet.http.HttpServletResponse;		

import org.springframework.beans.factory.annotation.Autowired;		
import org.springframework.stereotype.Controller;		
import org.springframework.web.bind.annotation.RequestMapping;		

import com.example.pojo.User;		
import com.example.service.LoginService;		

@Controller
public class LoginController{
	@Autowired
	private LoginService service;
    @RequestMapping("/login")		
    public String login(HttpServletRequest req, HttpServletResponse res) throws Exception {
    	String username = req.getParameter("user");	
        if (username == null || username.isEmpty()) {	
        	req.setAttribute("msg", "登录失败");	
            return "Login";	
        } 
    	User user = service.getUser(username);
    	if (user == null) {	
    		req.setAttribute("msg", "不存在用户");
        	return "Login";	
        } else {
        	req.getSession().setAttribute("user", username);	
        	req.setAttribute("msg", "登录成功");	
            return "Home";		
        }
    }
}		

LogoutController

java 复制代码
package com.example.controller;		
		
import javax.servlet.http.HttpServletRequest;		
import javax.servlet.http.HttpServletResponse;		
		
import org.springframework.stereotype.Controller;		
import org.springframework.web.bind.annotation.RequestMapping;		
		
@Controller		
public class LogoutController {		
		
	@RequestMapping("/logout")	
	public String logout(HttpServletRequest req, HttpServletResponse res) {	
		req.getSession().invalidate();
		req.setAttribute("msg", "登出成功");
		return "Login";
	}	
		
}		

4.3 创建对应页面

(maven_webapp模块)

删除WEB-INF/web.xml

删除index.jsp

src/main/webapp/WEB-INF/jsp/Login.jsp

html 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% if(request.getAttribute("msg") != null) { %>
<%=request.getAttribute("msg")%>
<% } %>
<br/>
登录页面(maven_多模块)<br/>
<form name="form1" action="/login" method="post">
    <input type="text" name="user" />
    <input type="password" name="password" />
    <button>登录</button>
</form>
</body>
</html>

src/main/webapp/WEB-INF/jsp/Home.jsp

html 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=request.getAttribute("msg")%>
<br/>
<form action="/logout" method="post">
  <button>logout</button>
</form>
</body>
</html>

5 数据库访问

连接数据库: mysql -hlocalhost -P3306 -uroot -proot

创建数据库: create database maven1;

切换数据库: use maven1;

创建数据库表: create table user(username varchar(20) primary key, password varchar(20) not null);

5.1 创建Mybatis配置类

MybatisConfig.java(maven_dao模块)

java 复制代码
package com.example.config;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
public class MybatisConfig {
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer m = new MapperScannerConfigurer ();
        m.setBasePackage("com.example.mapper"); //扫描mapper包
        return m;
    }
}

5.2 业务逻辑代码

5.2.1 创建Model类

(maven_pojo模块)

java 复制代码
package com.example.pojo;
import lombok.Data;
@Data    
public class User {
    private String username;
    private String password;
}

5.2.2 创建LoginMapper.java

(maven_dao模块)

java 复制代码
package com.example.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.example.pojo.User;

@Mapper
public interface LoginMapper {
    public User selectUserById(@Param("username") String username);
    public List<User> selectAllUsers();
    public int insertUser(User user);
    public int updateUser(User user);
    public int deleteUser(@Param("username") String username);
}

5.2.3 创建LoginMapper.xml

src/main/resources/com/example/mapper/LoginMapper.xml(maven_dao模块)

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mapper.LoginMapper">

    <!-- 查询用户ById -->
    <select id="selectUserById" resultType="com.example.pojo.User">
        SELECT username, password
        FROM user
        WHERE username = #{username}
    </select>

    <!-- 查询所有用户 -->
    <select id="selectAllUsers" resultType="list">
        SELECT username, password
        FROM user
        ORDER BY username ASC
    </select>

    <!-- 插入新用户 -->
    <insert id="insertUser" parameterType="com.example.pojo.User" >
        INSERT INTO user (username, password)
        VALUES (#{username}, #{password})
    </insert>

    <!-- 更新用户信息 -->
    <update id="updateUser" parameterType="com.example.pojo.User">
        UPDATE user
        SET username = #{username},
            password = #{password}
        WHERE username = #{username}
    </update>

    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="long">
        DELETE FROM user WHERE username = #{username}
    </delete>
</mapper>

5.2.4 创建LoginService

创建接口(maven_service模块)

java 复制代码
package com.example.service;

import com.example.pojo.User;

public interface LoginService {
    User getUser(String username);
}

创建实现类(maven_service模块)

java 复制代码
package com.example.service;

import com.example.mapper.LoginMapper;
import com.example.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class LoginServiceImpl implements LoginService{
    @Autowired
    private LoginMapper dao;
    public User getUser(String username) {
        return dao.selectUserById(username);
    }

}

5.3 数据库连接信息

创建数据库连接信息 resources/jdbc.properties(maven_dao模块)

java 复制代码
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/maven1
jdbc.username=root
jdbc.password=root

创建JdbcConfig.java(maven_dao模块)

java 复制代码
package com.example.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import com.alibaba.druid.pool.DruidDataSource;

public class JdbcConfig {
    
    @Value("${jdbc.driver}")
    private String driver;
    
    @Value("${jdbc.url}")
    private String url;
    
    @Value("${jdbc.username}")
    private String username;
    
    @Value("${jdbc.password}")
    private String password;
    // 配置数据源
    @Bean    
    public DruidDataSource druidDataSource() {    
        DruidDataSource d = new DruidDataSource();
        d.setDriverClassName(driver);
        d.setUrl(url);
        d.setUsername(username);
        d.setPassword(password);
        return d;

    }
    // 配置事务控制
    @Bean    
    public PlatformTransactionManager transactionManager(DruidDataSource datasource) {    
        DataSourceTransactionManager ds = new DataSourceTransactionManager();
        ds.setDataSource(datasource);
        return ds;
    }

}

5.4 加载数据源

SpringConfig.java(maven_webapp模块)

java 复制代码
package com.example.config;				
				
import org.springframework.context.annotation.Configuration;				
import org.springframework.context.annotation.Import;				
import org.springframework.context.annotation.PropertySource;				
import org.springframework.transaction.annotation.EnableTransactionManagement;				
				
@Configuration				
@PropertySource("classpath:jdbc.properties")				// 加载properties文件
@Import({JdbcConfig.class})				// 导入数据源实现类
@EnableTransactionManagement				// 启动事务管理注解
public class SpringConfig {				
				
}				

5.5 整合mybatis

MybatisConfig.java(maven_dao模块)

java 复制代码
@Bean	
public SqlSessionFactoryBean sqlSessionFactory(DruidDataSource ds){	
	SqlSessionFactoryBean b = new SqlSessionFactoryBean();
	b.setTypeAliasesPackage("com.example.pojo"); //用于自动类型转换
	b.setDataSource(ds);
	return b;
}	

SpringConfig.java(maven_web模块)

java 复制代码
package com.example.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@ComponentScan({"com.example.service"})
@PropertySource("jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}

6 视图

6.1 视图解析器

SpringMvcConfig.java(maven_webapp模块)

java 复制代码
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/jsp/", ".jsp");
    }

6.2 视图控制器

SpringMvcConfig.java(maven_webapp模块)

java 复制代码
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("Login");
    }

7 扩展

静态资源访问

SpringMvcConfig.java(maven_webapp模块)

java 复制代码
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**")  // 满足条件请求不走拦截器
                .addResourceLocations("/WEB-INF/css/"); //走指定的资源访问
    }

新建css样式 /WEB-INF/css/style.css(maven_webapp模块)

html 复制代码
body {	
	color: blue;
}	

Login.jsp添加样式(maven_webapp模块)

html 复制代码
<link rel="stylesheet" href="../css/style.css">

启动服务器

注释:插件启动是tomcat7与Servlet4不兼容,控制台会出错。手动添加项目到Tomcat9启动

(1) 首页

(2) 未输入用户名登录

(3) 错误用户名登录

(4) 正确用户名登录

(5) 登出

相关推荐
香香甜甜的辣椒炒肉2 小时前
Spring JDBC 万能模板
java·后端·spring
liaowenxiong2 小时前
实现类和接口的关系
java
编程迪2 小时前
基于Java和uniapp开发的名片交换分享系统企业名片管理软件个人电子名片小程序源码
java·uni-app·电子名片·名片小程序·名片软件源码
开开心心就好2 小时前
经典塔防游戏移植移动端随时畅玩
java·前端·科技·游戏·edge·django·pdf
ZPC82102 小时前
moveit servo 发指令给real arm
java·前端·数据库
企微增长观察2 小时前
企业微信怎么注册?2026年完整注册流程
java·人工智能·企业微信
穿条秋裤到处跑82 小时前
java2AI系列:SpringAI 通过 Function Calling 接入外部系统
java·人工智能
亚空间仓鼠2 小时前
Ansible之Playbook(四):循环与判断
java·服务器·ansible
希望永不加班3 小时前
SpringBoot 依赖管理:BOM 与版本控制
java·spring boot·后端·spring