【Web】Maven搭建前后端连接实例
前言建立Maven项目项目目录正式开始配置pom.xml配置db.properties文件applicationContext.xmlspring-mvc.xmlmapper下的UserMapper.xmlbean下的User.javadao层UserDaoservice层UserServiceImpl下的UserServiceImpl
controller层UserControllerWEB-INF下的web.xml前端页面index.jspok.jsp
最终效果
前言
暑期项目实习第五课,用IDEA中的Maven快速生成项目并通过其独特的导包方式导入Jar包等。
建立Maven项目
New Project–>Maven–>Create from archetype(此步骤是套用项目模板也可不套用)。 填写项目路径名称等。 从国内网络获取项目数据原型。在此处应双勾选Override。 在./m2文件夹下的settings.xml文件中的mirrors中加上以下内容(让他在国内阿里云镜像地址下载依赖文件等,可以提高下载速率)。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
也可以选择直接下载settings.xml
项目目录
通过Maven模板,我们最开始得到的项目文件。 通过补充后我们将总项目文件建成下图。 在项目中,bean等同于model,controller等同于servlet。
正式开始
本次我们将通过Maven联网导入各种依赖,所以在执行过程IDEA联网下载时,切勿断网!否则可能导致依赖不全,导致项目文件无法正常启动,当依赖完全下载后便可离线。
配置pom.xml
通过配置pom.xml导入各种依赖(关注dependencies内的变化),省去之前累赘的自行添加jar包的操作。
注:MySQL5.0的同学在相应的地方修改相对应的MySQL的依赖版本。
<?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>org.example</groupId>
<artifactId>testssm</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>testssm Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- spring版本号 -->
<spring.version>5.0.2.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.6</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<c3p0.version>0.9.5.2</c3p0.version>
<taglibs.version>1.1.2</taglibs.version>
</properties>
<dependencies>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</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-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 导入java ee jar 包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志文件管理包 -->
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 数据连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${taglibs.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- 导入servlet-api/jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>testssm</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
然后在项目右侧点开Maven控制台,下载各种依赖,右下角会出现下载进度条。
注:如果出现这条选择右边这项让Maven自动import各种组件。
配置db.properties文件
以下是我自己的配置方法,此为MySQL8.0所用的连接数据,5.0详见【MySql】MySql5.0与8.0在连接数据库时候的区别
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/abc?useSSL=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root
applicationContext.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
:context
="http://www.springframework.org/schema/context"
xmlns
:aop
="http://www.springframework.org/schema/aop"
xmlns
:tx
="http://www.springframework.org/schema/tx"
xsi
:schemaLocation
="http
://www
.springframework
.org
/schema
/beans
http
://www
.springframework
.org
/schema
/beans
/spring
-beans
-4.3.xsd
http
://www
.springframework
.org
/schema
/context
http
://www
.springframework
.org
/schema
/context
/spring
-context
-4.3.xsd
http
://www
.springframework
.org
/schema
/aop
http
://www
.springframework
.org
/schema
/aop
/spring
-aop
-4.3.xsd
http
://www
.springframework
.org
/schema
/tx
http
://www
.springframework
.org
/schema
/tx
/spring
-tx
-4.3.xsd"
>
<!-- 1.配置数据库相关参数properties的属性:$
{url
} -->
<context
:property
-placeholder location
="classpath:db.properties"/>
<!-- 2.配置数据源
-->
<bean id
="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name
="driverClass" value
="${jdbc.driver}"/>
<property name
="jdbcUrl" value
="${jdbc.url}"/>
<property name
="user" value
="${jdbc.username}"/>
<property name
="password" value
="${jdbc.password}"/>
<property name
="maxPoolSize" value
="30"/>
<property name
="minPoolSize" value
="2"/>
</bean
>
<!-- 3.配置SqlSessionFactory对象
-->
<bean id
="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池
-->
<property name
="dataSource" ref
="dataSource"/>
<!-- 扫描bean包 使用别名
-->
<property name
="typeAliasesPackage" value
="com.zhongruan.bean"></property
>
<!--配置加载映射文件 UserMapper
.xml
-->
<property name
="mapperLocations" value
="classpath:mapper/*.xml"/>
</bean
>
<!-- 自动生成dao
,mapper
-->
<!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中
-->
<bean
class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 给出需要扫描Dao接口包
-->
<property name
="basePackage" value
="com.zhongruan.dao"/>
<!-- 注入sqlSessionFactory
-->
<property name
="sqlSessionFactoryBeanName" value
="sqlSessionFactory"/>
</bean
>
<!--自动扫描
-->
<context
:component
-scan base
-package="com.zhongruan"/>
<!-- 配置事务
-->
<!-- 5.配置事务管理器
-->
<bean id
="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name
="dataSource" ref
="dataSource"/>
</bean
>
<!-- 6.开启事务注解
-->
<tx
:annotation
-driven
></tx
:annotation
-driven
>
</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
:mvc
="http://www.springframework.org/schema/mvc"
xmlns
:context
="http://www.springframework.org/schema/context"
xmlns
:aop
="http://www.springframework.org/schema/aop"
xmlns
:tx
="http://www.springframework.org/schema/tx"
xsi
:schemaLocation
="http
://www
.springframework
.org
/schema
/beans
http
://www
.springframework
.org
/schema
/beans
/spring
-beans
-4.3.xsd
http
://www
.springframework
.org
/schema
/mvc
http
://www
.springframework
.org
/schema
/mvc
/spring
-mvc
-4.3.xsd
http
://www
.springframework
.org
/schema
/context
http
://www
.springframework
.org
/schema
/context
/spring
-context
-4.3.xsd
http
://www
.springframework
.org
/schema
/aop
http
://www
.springframework
.org
/schema
/aop
/spring
-aop
-4.3.xsd
http
://www
.springframework
.org
/schema
/tx
http
://www
.springframework
.org
/schema
/tx
/spring
-tx
-4.3.xsd"
>
<!-- 1.注解扫描位置
-->
<context
:component
-scan base
-package="com.zhongruan.controller" />
<!-- 2.配置映射处理和适配器
-->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 3.视图的解析器
-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name
="prefix" value
="/pages/" />
<property name
="suffix" value
=".jsp" />
</bean
>
</beans
>
mapper下的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.zr0701.dao.UserDao">
<select id
="findUserByName" parameterType
="String" resultType
="User">
select
* from user where name
=#
{name
}
</select
>
</mapper
>
bean下的User.java
package com
.zr0701
.bean
;
public class User {
private int id
;
private String name
;
private String password
;
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 String
getPassword() {
return password
;
}
public void setPassword(String password
) {
this.password
= password
;
}
@Override
public String
toString() {
return "User{" +
"id=" + id
+
", name='" + name
+ '\'' +
", password='" + password
+ '\'' +
'}';
}
}
dao层UserDao
package com
.zr0701
.dao
;
import com
.zr0701
.bean
.User
;
import org
.springframework
.http
.converter
.json
.GsonBuilderUtils
;
public interface UserDao {
User
findUserByName (String name
);
}
service层
UserService
package com.zr0701.service;
public interface UserService { //该层实现业务上的功能 boolean login(String name,String password); }
Impl下的UserServiceImpl
package com
.zr0701
.service
.Impl
;
import com
.zr0701
.bean
.User
;
import com
.zr0701
.dao
.UserDao
;
import com
.zr0701
.service
.UserService
;
import org
.springframework
.beans
.factory
.annotation
.Autowired
;
import org
.springframework
.stereotype
.Service
;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao
;
@Override
public boolean
login(String name
, String password
) {
System
.out
.println("开始查询:"+name
);
User user
= userDao
.findUserByName(name
);
System
.out
.println("查询结束:"+name
);
if(user
!= null && user
.getPassword().equals(password
)){
return true;
}
return false;
}
}
controller层UserController
package com
.zr0701
.controller
;
import com
.zr0701
.bean
.User
;
import com
.zr0701
.service
.UserService
;
import org
.springframework
.beans
.factory
.annotation
.Autowired
;
import org
.springframework
.stereotype
.Controller
;
import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
import org
.springframework
.web
.servlet
.ModelAndView
;
@Controller
@
RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService
;
@
RequestMapping("/login.do")
public ModelAndView
login(User user
){
System
.out
.println("UserController run");
boolean flag
= userService
.login(user
.getName(),user
.getPassword());
System
.out
.println("UserController end");
ModelAndView modelAndView
=new ModelAndView();
if(flag
){
modelAndView
.setViewName("../ok");
}else {
modelAndView
.setViewName("../failure");
}
return modelAndView
;
}
}
WEB-INF下的web.xml
<?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"
version
="3.1">
<!-- 配置加载类路径的配置文件
-->
<context
-param
>
<param
-name
>contextConfigLocation
</param
-name
>
<param
-value
>classpath
*:applicationContext
.xml
</param
-value
>
</context
-param
>
<!-- 配置监听器
-->
<listener
>
<listener
-class>org
.springframework
.web
.context
.ContextLoaderListener
</listener
-class>
</listener
>
<listener
>
<listener
-class>org
.springframework
.web
.context
.request
.RequestContextListener
</listener
-class>
</listener
>
<!-- 解决中文乱码过滤器
-->
<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
>
</filter
>
<filter
-mapping
>
<filter
-name
>characterEncodingFilter
</filter
-name
>
<url
-pattern
>
前端页面
建立两个前端页面一个功能页(index.jsp),一个反馈页(ok.jsp)。
index.jsp
<%@ page contentType
="text/html;charset=UTF-8" language
="java" %>
<html
>
<head
>
<title
>$Title$
</title
>
</head
>
<body
>
<h1
>登陆
</h1
>
<form action
="/user/login.do" method
="post">
name
:<input name
="name" type
="text">
password
:<input name
="password" type
="password">
<input type
="submit" value
="login">
</form
>
</body
>
</html
>
ok.jsp
<%@ page contentType
="text/html;charset=UTF-8" language
="java" %>
<html
>
<head
>
<title
>Title
</title
>
</head
>
<body
>
ok
!
</body
>
</html
>
最终效果
首先登陆主页并填入数据库(打开Mysql服务)内已经存在的数据内容。 主页地址:http://localhost:8081/ 单击 Login按钮得到反馈。