以下操作基于
2020.3企业版
1.创建Java Enterprise项目
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lii6FyNy-1669548886654)(assets/image-20221109105434-y39cakk.png)]](https://img-blog.csdnimg.cn/d27f3c3067ef4faf8c1f047c85dedfbc.png)
直接默认即可
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y35MWx5Y-1669548886654)(assets/image-20221109105622-fcd9xfy.png)]](https://img-blog.csdnimg.cn/359c475bcb3041f693b5974e2dd3baf9.png)
输入项目相关信息
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H5JGlWUW-1669548886655)(assets/image-20221109105713-igwb7w3.png)]](https://img-blog.csdnimg.cn/d26f2c173bc04cc885eb462503238b49.png)
点击完成后,得到以下目录结构
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l4reuygh-1669548886655)(assets/image-20221109105757-r4cn7bg.png)]](https://img-blog.csdnimg.cn/78bb8002d98e4ffe9bd3bae0f5cfc29b.png)
2.搭建项目目录结构
java目录下
-
controller:实现控制转发,基本参数校验,不复杂的简单业务处理
-
config:配置类存放的地方
-
service:业务逻辑层
- impl(实现层)
-
dao:数据持久层
-
entitry:实体类
-
resources
- mappers(存放sql语句)
-
webapp
-
WEB-INF
- views(视图的JSP文件)
-
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dw9KBSKj-1669548886655)(assets/image-20221116105439-d9bmup8.png)]](https://img-blog.csdnimg.cn/4f4544a9f18c4d4b9ab671b8e38a3f11.png)
3.导入依赖
在pom.xml文件中导入SSM框架相关依赖
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.23</version>
<scope>test</scope>
</dependency>
<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.23</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- JDBC -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
导入完成后,点击右上角的更新
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WVSPDK7-1669548886655)(assets/image-20221109113134-v5rg43v.png)]](https://img-blog.csdnimg.cn/501fb0c87f6e4a4180a95d3d4a66c773.png)
如果没有出现
Spring Config,则检查一下是否正确安装了依赖了
4.通过类配置项目
创建类App
在config目录下创建类App
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7mDx5B8v-1669548886656)(assets/image-20221116103236-ee5zteu.png)]](https://img-blog.csdnimg.cn/d2299f57130a4266a5f57ec7f7071f8a.png)
- 添加注解
@Configuration——表示为配置类
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MQz0ylJl-1669548886656)(assets/image-20221116103406-j9ofhna.png)]](https://img-blog.csdnimg.cn/66ea0dd839f247509b5fc241b01111bb.png)
- 添加注解
ComponentScan——扫描service
@ComponentScan(basePackages = "com.leo.SSM.service")
注意:
- basePackages 配置:查看下图位置
这里扫描的包对应位置也需要添加注解
例如这里,我扫描了service,那与之对应的就需要在service的各个类中添加注解
@Service
为防止后面忘记,先在service目录下创建一个service接口
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPnsGNDR-1669548886656)(assets/image-20221116105603-c5nohb4.png)]](https://img-blog.csdnimg.cn/c3841dc2416e4c26a78caa6a4f023d08.png)
在service->impl下创建对应的实现类
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bf5QETjB-1669548886657)(assets/image-20221116111944-erw6ogu.png)]](https://img-blog.csdnimg.cn/1a091dd637ad49d78a6e2b32689e3016.png)
在实现类中添加@Service注解
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VE2eecME-1669548886657)(assets/image-20221116112009-ew2qlnc.png)]](https://img-blog.csdnimg.cn/38b30a73a3e4496895b334fc52d8ffe8.png)
实现接口
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gU8skaxY-1669548886657)(assets/image-20221127115912-1bh4wjr.png)]](https://img-blog.csdnimg.cn/bf60d3a44ab74686bff18a3e3c91ac06.png)
- 添加注解
@MapperScan——扫描dao
@MapperScan(basePackages = "com.leo.SSM.dao")
创建UserDao接口
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dsc9LnT-1669548886657)(assets/image-20221012115126-rd0ld4f.png)]](https://img-blog.csdnimg.cn/c457ed23fd8c4fe99786d00ed5a0f6e2.png)
添加注解@Mapper
package com.leo.SSM.dao;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public class UserDao {
}
- 添加注解——添加配置源(配置jdbc)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvSUgtBS-1669548886658)(assets/image-20221116105945-36gqupw.png)]](https://img-blog.csdnimg.cn/b4a37014284b46ae8cb5e1c3db18968c.png)
直接直接复制下列代码进入项目即可
@PropertySource("classpath:jdbc.properties")
创建jdbc配置文件
在resources下创建jdbc.properties
选择Resource Bundle
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zw5gzdFY-1669548886658)(assets/image-20221116110150-t8atbxh.png)]](https://img-blog.csdnimg.cn/0d71d3f68e654508a466d7543c0bbc06.png)
仅输入名称即可
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBnSqObt-1669548886658)(assets/image-20221116110226-v8001zd.png)]](https://img-blog.csdnimg.cn/99bc97ea6a8342cb9e6fef9d5fae3b88.png)
创建完成
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JwvCLEiz-1669548886658)(assets/image-20221116110240-8mktok3.png)]](https://img-blog.csdnimg.cn/97663ffa944d40c8b7ebf81ef41f4117.png)
进行配置
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///studb?useSSL=false
jdbc.username=你SQL的用户名
jdbc.password=SQL的密码
- 开启事务管理
在App类中继续添加@EnableTransactionManagement注解,表示开启事务
配置类App
创建于jdbc对应的属性
private String driver;
private String url;
private String userName;
private String password;
- 添加注解,设置值
@Value("${jdbc.driver}")
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-he7WJPUf-1669548886658)(assets/image-20221116110655-wlypjiq.png)]](https://img-blog.csdnimg.cn/31febbc2f4f9445f98c2950c2d509ca7.png)
属性的最终配置
@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注解——往IOC容器中放东西
@Bean
public DataSource dataSource(){
}
- 创建一个dataSource并返回
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(userName);
dataSource.setPassword(password);
return dataSource;
配置mybatis中的SqlSessionFacotry
- 创建方法,添加注解
@Bean
public SqlSessionFactory sqlSessionFactory(){
}
-
配置mybatis相关属性
- 数据源
- 映射包名
- 对应sql存放位置
- 映射关系(下划线改为小驼峰)
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
// 映射包名
sqlSessionFactoryBean.setTypeAliasesPackage("com.leo.SSM.entity");
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(
resolver.getResources("classpath*:mappers/*.xml")
);
org.apache.ibatis.session.Configuration configuration = Objects.requireNonNull(sqlSessionFactoryBean.getObject()).getConfiguration();
configuration.setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
配置事务
@Bean
public PlatformTransactionManager transactionManager(){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource());
return transactionManager;
}
配置Web-MVC
在config文件夹下创建类WebMvcConfig
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HQ60y3Lh-1669548886659)(assets/image-20221116114030-qjbnc65.png)]](https://img-blog.csdnimg.cn/005a09b6254647a1afb481d5a9879b41.png)
- 添加注解
@Configuration,声明配置类
import org.springframework.context.annotation.Configuration;
@Configuration
- 添加注解
@EnableWebMvc——启动webMvc
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@EnableWebMvc
- 扫包与controller对应
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePack
ages = "com.leo.SSM.controller")
实现WebMvcConfigurer
public class WebMvcConfig implements WebMvcConfigurer {
}
选择重写方法
按ctrl+o选择以下方法进行重写
- addViewControllers
- configureViewResolvers
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FjVchqPS-1669548886659)(assets/image-20221116115146-61ipcs8.png)]](https://img-blog.csdnimg.cn/23c5eb7d12c4473aa57fbea6adf702a0.png)
添加视图解析器
- 设置视图对应文件位置
- 设置视图文件后缀
- 设置视图解析器,支持JSTL
private ViewResolver viewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
viewResolver.setViewClass(JstlView.class);
return viewResolver;
}
注册视图解析器
在configureViewResolvers方法中,进行视图解析器的注册
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
// 注册视图解析器
registry.viewResolver(viewResolver());
}
添加view的控制
在spring中,很可能出现很多仅需要页面跳转而没有具体业务逻辑的代码比如
@GetMapping('/login') public String login(){ return "login"; }这样长久以往就会生成很多这样的空方法,因此我们需要通过SprIngMVC中的
addViewControllers简化实现上述逻辑
- 设置
/对应的页面为login
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
}
创建Controller
在controller目录下创建UserController类,添加注解@Controller
package com.leo.SSM.controller;
import org.springframework.stereotype.Controller;
@Controller
public class UserController {
}
配置整体servlet
创建类AppInit
在config目录下创建AppInit类,并继承AbstractAnnotationConfigDispatcherServletInitializer
继承的类用于DispatcherServlet 初始化
DispatcherServlet:Spring MVC的核心组件,它是request首先到达的地方,负责在各个组件间传递加工
- 完成servlet容器功能
- 完成配置MVC基础功能
- 完成配置
DispatcherServlet和ContextLoaderListenerContextLoaderListener——Spring实现了Tomcat提供的ServletContextListener接口,写了一个监听器来监听项目启动。一旦项目启动,会触发ContextLoaderListener中的特定方法
实现其方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UDA4UB8k-1669548886659)(assets/image-20221126230419-xfoxiwo.png)]](https://img-blog.csdnimg.cn/ca2d848a829f421788083d9207840298.png)
修改各方法逻辑
**getRootConfigClasses——**配置root上下文(数据源等)
这里直接从我们的APP中获取即可
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{App.class};
}
**getServletConfigClasses——**配置dispatcher servlet(视图解析器)
这里从
WebMvcConfig中获取
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebMvcConfig.class};
}
getServletMappings——指定开始被servlet处理的url(默认设置为 /)
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
5.实现login页面
在WebMvcConfig.java文件配置下的prefix目录下创建文件,名称为login
<%--
Created by IntelliJ IDEA.
User: Leo
Date: 2022/11/6
Time: 15:37
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login" method="post">
<label>
用户名:
<input name="userName" />
<span style="color: red">
${msg}
</span>
</label>
<br />
<label>
密   码:
<input name="passwd" type="password" />
</label>
<br/>
<input type="submit" value="登录">
</form>
</body>
</html>
6.创建userController
在UserController 添加方法
@PostMapping("/login")
public String login(){
return "index";
}
因为在form表单中
- action = login ----> (“/login”)
- method=“post” —>@PostMapping
我们运行测试一下

当我们点击登录时,返回的页面就是index.jsp
当然,现在没有进行逻辑判断,但是实际上对于webmvc的配置已经成功
7.创建实体类
在entity文件目录下创建与数据库对应的类
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZqxqhbH-1669548886659)(assets/image-20221127114905-gkmig8l.png)]](https://img-blog.csdnimg.cn/7ad86251405b43ef877d3bc396410e33.png)
8.实现UserDao
定义接口
首先我们需要实现登录接口,因此在UserDao中定义获取用户信息的接口
UserInfo getUserInfo(@Param("userNumber") String userNumber , @Param("passwd") String passwd);
实现SQL
在resources->mappers创建UserMapper.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.leo.SSM.dao.UserDao">
<select
id="getUserInfo"
resultType="com.leo.SSM.entity.UserInfo"
>
select
pk_user_id,
u_number,
u_name,
u_passwd
from user_info
where u_number = #{userNumber} and u_passwd = #{passwd}
</select>
</mapper>
9.实现UserService
在UserService接口出定义方法
- 返回类型——boolean
- 传递参数
- 方法名——login
package com.leo.SSM.service;
import javax.servlet.http.HttpSession;
import java.util.List;
public interface UserService {
Boolean login(String userNumber , String passwd, HttpSession session, Model model);
}
定义属性
使用注解
@Resource将userDAO交给Spring进行管理
@Resource
private UserDAO userDAO;
实现方法
@Override
public Boolean login(String userNumber, String passwd, HttpSession session) {
UserInfo userInfo = null;
userInfo = userDAO.getUserInfo(userNumber , passwd);
if(null != userInfo){
session.setAttribute("user",userInfo);
return true;
}else{
model.addAttribute("msg","用户名或密码错误");
return false;
}
}
10.实现UserController逻辑
添加属性——UserService
@Resource
private UserService userService;
修改函数参数
与login.jsp中的name对应
login(String userName , String password , HttpSession session)
修改逻辑
直接调用UserService,判断返回值
- true——进入index.jsp页面
- false——停留在login.jsp页面
boolean isSuccess = userService.login(userName , password,session);
if(isSuccess){
return "index";
}else{
return "login";
}
实现logout
- 使session失效
- 设置提示信息
- 跳转login页面
@PostMapping("/logout")
public String logout(HttpSession session, Model model){
session.invalidate();
model.addAttribute("msg","退出成功");
return "login";
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pEgiWHwX-1669548886653)(assets/image-20221109105330-heilasm.png)]](https://img-blog.csdnimg.cn/6fef4fe7838a4fceb44a2d0fbfbb81cd.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jZRm3YXt-1669548886656)(assets/image-20221116103959-o9vgusq.png)]](https://img-blog.csdnimg.cn/951ea53046e046148092140378d34e19.png)



![[论文评析]AdaptivePose: Human Parts as Adaptive Points,AAAI 2022](https://img-blog.csdnimg.cn/e09ba0ae40f84b96bf5daa72ce56b097.png)















