eclipse快速搭建ssm
欢迎使用阅读快速搭建ssm,文章若有错误还望大佬指出。
这里使用的环境是eclipse 2020-06,maven 3.6.3,jdk14,Tomcat 9.0,mysql 8.0.20
快速搭建步骤
- 新建maven工程,重新构建环境
- 导包
- 编写Spring配置文件
- 配置web.xml
- 使用java代码配置mybatis
- 添加所有java代码
- 添加jsp
在新建项目之前,可以配置一下maven的镜像,选择国内镜像,在导入jar包的时候会快很多,当然,这一步可以跳过。
在红框的路径下新建这个文件settings.xml, 配置成功过后有一个open file这个按钮。
我配置的阿里云镜像,settings.xml代码如下
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors>
</settings>
新建maven工程,重新构建环境
选择下面的webapp原型
这是搭建好的项目,但是报错
然后下一步,输入group id 和 artifact id ,点击完成,然后右键build path,add library->Server Runtime->Apache Tomcat 9.0
把jdk版本换成14,就不演示了
然后在pom.xml文件中指定jdk版本
代码如下
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>14</source>
<target>14</target>
</configuration>
</plugin>
</plugins>
记得保存一下文件,然后打开Navigator
继续修改jdk版本,和web版本
最后修改一下web.xml模板
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
<display-name>Archetype Created Web Application</display-name>
</web-app>
然后更新一下maven项目。
到了最后,项目既没有警告,也没有错误,让人心情舒畅。
导包
在pom.xml的依赖中添加如下依赖,其他依赖会自动导入
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
编写spring的配置文件
在resources目录下添加
application.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:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:component-scan base-package="ssm">
<!-- 控制层在另一个配置文件单独扫描,这里不用重复扫描,以免出现问题 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<context:annotation-config></context:annotation-config>
</beans>
Spring-MVC.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:tx="http://www.springframework.org/schema/tx"
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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 只扫描控制层 -->
<context:component-scan base-package="ssm.controller"></context:component-scan>
<context:annotation-config></context:annotation-config>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
<display-name>Archetype Created Web Application</display-name>
<!-- 让静态资源可以被访问到,写在前面可以不必进入到SpringMVC,由Tomcat处理静态资源 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
<url-pattern>*.jpeg</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Spring-MVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Spring-MVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring-MVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Encoding</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>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
我这里在web.xml配置了
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
<url-pattern>*.jpeg</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
如果不想这样,那么可以删掉,在Spring-MVC.xml里面添加如下代码:
<mvc:resources location="/img/" mapping="/img/**"></mvc:resources>
<mvc:annotation-driven></mvc:annotation-driven>
两个星号表示所有文件。也可以写成*.js,即只开放.js静态资源。
使用java代码配置mybatis
在刚刚那个目录下配置jdbc.properties
配置如下
jdbc.username=root
jdbc.password=123456
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/ssm?serverTimezone=CST
对于数据库的搭建,新建数据库名为ssm
然后创建表,和插入数据
-- ----------------------------
-- Table structure for person
-- ----------------------------
CREATE TABLE `person` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`sex` char(1) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ;
-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES (1, 'ww', '男');
INSERT INTO `person` VALUES (2, '中文', '女');
然后新建java文件,我在ssm.configuration包下面建JdbcConfig.java
package ssm.configuration;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
@MapperScan(basePackages = "ssm.mapper")
@PropertySource("classpath:jdbc.properties")
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 PooledDataSource pooledDataSource() {
PooledDataSource ds = new PooledDataSource(driver, url, username, password);
return ds;
}
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(@Autowired DataSource dataSource) {
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setDataSource(dataSource);
return ssfb;
}
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(@Autowired DataSource dataSource) {
DataSourceTransactionManager tm = new DataSourceTransactionManager(dataSource);
return tm;
}
}
添加剩余的java代码
在ssm.entity包中添加Person
package ssm.entity;
public class Person {
private int id;
private String name;
private char sex;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", sex=" + sex + "]";
}
}
在ssm.mapper添加Person.mapper
package ssm.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import ssm.entity.Person;
@Mapper
public interface PersonMapper {
@Select("select * from person limit #{from},#{to} ")
List<Person> getSubPerson(@Param("from") int begin, @Param("to") int to);
}
在ssm.service添加PersonService
package ssm.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ssm.entity.Person;
import ssm.mapper.PersonMapper;
@Service
public class PersonService {
@Autowired
private PersonMapper personMapper;
public List<Person> get5Person(){
return personMapper.getSubPerson(0, 5);
}
}
在ssm.controller中添加UserController
package ssm.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import ssm.service.PersonService;
@Controller
public class UserController {
@Autowired
private PersonService personService;
@GetMapping(value = "index")
public String index(Model model) {
model.addAttribute("persons", personService.get5Person());
return "index";
}
}
在这个目录下建index.jsp
代码:
<%@page import="ssm.entity.Person"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
List<?> objects = (List<?>) request.getAttribute("persons");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
<img src="img/pic.png">
<h2>查询前五个person</h2>
<%
for (Object p : objects) {
%>
<h4><%=p%></h4>
<%
}
%>
</body>
</html>
放一个图片在这里试试能否访问静态资源
pic.jpg