最近再做一个项目,需要用到maven 和 SSM搭建项目,这里记录一下,搭建的全过程,也踩了好多坑,做个记录。
这里是项目的地址: https://pan.baidu.com/s/13C7pZPP_8qnMjtoaLDh4Bg
使用工具:Eclipse
使用框架:SSM + Maven
这里记录一下步骤:
一. 首先 创建一个 Maven 项目 jipao1-parent (pom)
jipao1-parent 下面再创建两个子工程 ,jipao1-manager(pom) 和 jipao1-common (jar)
创建过程不再描述了,应该可以自己搞定。
二。jipao1-manager 项目下面 创建了四个子工程
jipao1-manager-dao(jar)
jipao1-manager-pojo(jar)
jipao1-manager-service(jar)
jipao1-manager-web(war)
三。项目结构如下:
具体代码可以详见:https://pan.baidu.com/s/13C7pZPP_8qnMjtoaLDh4Bg
四。这里说一下 Controller, Service, Dao 三者之间的关系
4.1 jipao1-manager-web(war) 项目代表 Controller
pom文件如下:
<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>
<parent>
<groupId>cn-jipao1</groupId>
<artifactId>jipao1-manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>jipao1-manager-web</artifactId>
<packaging>war</packaging>
<!--
web层:
1,加载springmvc配置文件:spring坐标(依赖service间接获得)
2,jsp,jstl,servlet
-->
<dependencies>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version><!--$NO-MVN-MAN-VER$-->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>cn-jipao1</groupId>
<artifactId>jipao1-manager-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
这是 jipao1-manager-web 项目的pom文件 ,这里面引入了 Servlet 的一些依赖,也引入了 Service 的依赖
下面是 jipao1-manager-web 项目 web.xml 文件 ,
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="e3mall" version="2.5">
<!-- 项目入口文件 -->
<!-- 编码过滤器 -->
<!-- 编码过滤 -->
<filter>
<filter-name>characterEncoding</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>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 加载spring配置文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<!--
加载jar包配置文件:classpath*:applicationContext-*.xml
加载本地编译路径:classpath:applicationContext-*.xml
-->
<param-value>classpath*:applicationContext-*.xml</param-value>
</context-param>
<!-- 加载springmvc配置文件 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
</web-app>
从上面可以看出,DispatcherServlet 拦截的是 *.form 结尾的请求,并且这里的
<param-value>classpath*:applicationContext-*.xml</param-value> 注意到没有 classpath 后面有一个 * 号,这里先埋一个伏笔,这里解决了一个bug
4.2 jipao1-manager-service 项目的pom文件,
<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>
<parent>
<groupId>cn-jipao1</groupId>
<artifactId>jipao1-manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>jipao1-manager-service</artifactId>
<!--
service层:业务层
功能:事物管理,业务处理 spring管理
依赖dao:
-->
<dependencies>
<!-- Spring -->
<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-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version><!--$NO-MVN-MAN-VER$-->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>cn-jipao1</groupId>
<artifactId>jipao1-manager-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
这里的service 引入了dao的依赖,
4.3下面是 jipao1-manager-dao 的pom文件:
<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>
<parent>
<groupId>cn-jipao1</groupId>
<artifactId>jipao1-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>jipao1-manager</artifactId>
<packaging>pom</packaging>
<modules>
<module>jipao1-manager-dao</module>
<module>jipao1-manager-pojo</module>
<module>jipao1-manager-service</module>
<module>jipao1-manager-web</module>
</modules>
<!-- 后台系统聚合父工程:
1,统一管理子工程(统一打包,统一部署,统一启动)
2,抽取公共坐标,被子工程所依赖 tomcat插件:自动加载web工程,且进行启动:
-->
<dependencies>
<dependency>
<groupId>cn-jipao1</groupId>
<artifactId>jipao1-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 项目启动端口 -->
<port>8085</port>
<!-- 项目发布路径:/表示把项目发布tomcat服务器跟路径 类似tomcat/webapps/ROOT/ ROOT目录下项目访问特点,不需要写项目名,直接访问 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
这里的dao引入了entity的依赖、
有此可以看出,这几个子工程之间相互依赖,这样就会产生一个问题,controller 调用了 service的jar包,service又调用了 dao的jar包,但是dao中也会有.xml配置文件,这样就会产生一个问题,Spring 扫描不到dao项目中的配置文件,这样就会导致,我在启动项目的时候,一直说我加载不了dao中的接口,说我扫描不到,原来是 扫描不到dao工程中的配置文件,故而扫描不到dao中的接口,所以在 classpagth 后面加了一个 * 号,后来问题解决。
详细的代码可以直接将我的源码当下来,工程也在我的I:\J2EEWorkSpace\xinlegou\Resource\WorkSpace01 工作空间中。
其中我写了两个controller ,可以用这两个Controller 来做验证
第一个:DemoController
package cn.xljy.xlg.controller.token;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class DemoController {
@RequestMapping("/demo")
@ResponseBody
public String handleRequest() throws Exception{
System.out.println("进入DemoController");
// ModelAndView mav = new ModelAndView();
// mav.setViewName("demo");
// mav.getModel().put("msg", "你好啊");
System.out.println("退出DemoController");
return "Hello World";
}
}
这里可以直接访问: http://localhost:8085/demo.form
得到结果为:
第二个Controller : LoginController
package cn.xljy.xlg.controller.token;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.xljy.xlg.entity.User;
import cn.xljy.xlg.service.token.LoginService;
//@SuppressWarnings("unused")
@Controller
@RequestMapping("/login")
public class LoginController {
@Autowired
private LoginService loginService;
@RequestMapping("/doLogin")
@ResponseBody
public String doLogin(String jsCode){
String openId = "LoginController--openId";
System.out.println("获取到的jsCode:"+jsCode);
User user = loginService.getOpenId(jsCode);
return user.toString();
// return "KKKKK";
}
}
这里访问: http://localhost:8085/login/doLogin.form?jsCode=XXOO
这里的结果是:
这里记录一下,防止以后忘了。
不积跬步,无以至千里
不积小流,无以成江海