事先准备好系统环境
- Window 10
- JDK1.8
- Eclipse Java EE IDE for Web Developers(Version: Neon Release (4.6.0))
- Tomcat8.5
- Maven3.6
关于环境配置请参考我的其他文章
JavaEE开发环境搭建(基于Eclipse)https://www.jianshu.com/p/1b1a5a5c12f2
如何使用Eclipse创建Maven工程https://www.jianshu.com/p/9c70cf23c9e4
使用maven创建SSM框架
-
选择Maven Project
-
选择默认工作空间位置
-
选择web类型
-
填写GroupID、ArtifactID
Group ID:相当于一个组织
Artifact ID:相当于这个组织下的一个具体项目
Packege:根据Group ID和Artifact ID生成一个默认的名称
-
创建出的maven项目如下图
提示错误:
解决办法:在eclipse中设置Server为Tomcat,注意JRE设置为安装的JDK的jre
在工程上右键,查看工程属性,找到Java Build Path,添加Server Runtime为Tomcat
点击Finish后,项目工程变成下图
-
在项目上点击右键,查看项目信息
默认的Dynamic Web Module为2.3,使用Tomcat 8.5,需要修改为3.1
修改方法:
① maven工程所在目录有个.settings文件夹(默认隐藏)下面有个文件org.eclipse.wst.common.project.facet.core.xml
将内容改为:
② maven工程下的web.xml文件修改为
③ pom.xml文件中修改build节点,添加如下内容
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
④ 修改后,在项目上右键,找到Maven属性下的Update Project,点击之
⑤ 选择该项目进行更新,如果怕不能强制更新,可以勾选Force Update of Snapshots/Releases
⑥ 点击OK后更新maven项目,再观察项目属性,Module已经变为3.1
下载ssm框架所需的jar包
修改pom.xml内容为
4.0.0
com.huyonghua
ssm
war
0.0.1-SNAPSHOT
ssm Maven Webapp
http://maven.apache.org
4.3.8.RELEASE
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.3.1
provided
javax.servlet
jstl
1.2
org.springframework
spring-core
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-tx
${spring.version}
org.aspectj
aspectjrt
1.8.0
org.aspectj
aspectjweaver
1.8.0
org.mybatis
mybatis
3.3.0
mysql
mysql-connector-java
5.1.26
com.alibaba
druid
1.0.20
org.mybatis
mybatis-spring
1.2.3
log4j
log4j
1.2.17
org.slf4j
slf4j-api
1.7.21
junit
junit
3.8.1
test
ssm
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
保存后,可以看到相关jar包被下载至本地仓库
完善项目结构
因为服务端maven项目的标准结构有四个子包:src/main/java、src/main/resources、src/test/java、src/test/resources,这里缺少了src/test/resources,所以手动补上。
在项目中新建Source Folder
创建src/test/resoures目录后,工程如下图所示
右键查看项目属性,点击Deployment Assembly,移除test和target
Web Deployment Assembly是eclipse中的发布路径设置,DeployPath表示每个资源发布之后的文件路径。eclipse中使用tomcat使用启动web项目的流程是 java build path编译项目源代码生成的class文件放到buildpath的设置路径中,根据web deployment assembly将项目中的各个资源发布到设置的指定文件中
框架测试
-
创建项目中用的配置文件
log4j.properties
#USE THIS SETTING FOR OUTPUT MYBATIS`s SQL ON THE CONSOLE
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
srping-core.xml
spring-mvc.xml
spring-mybatis.xml
mybatis-config.xml
配置web.xml启用spring容器
index.jsp
contextConfigLocation
classpath:spring-core.xml
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
true
encoding
UTF-8
encodingFilter
/*
org.springframework.web.context.ContextLoaderListener
springMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
true
springMVC
*.do
-
数据库插入测试数据
创建一个test数据库,并建一个userinfo的表,表结构如下
插入测试数据
-
编写服务端代码
User.java
package com.huyonghua.domain;
/**
* 用户信息
*/
public class User {
// 成员变量
private Integer userid;
private String username;
private String password;
// 构造函数
public User() {
super();
}
public User(Integer userid, String username, String password) {
super();
this.userid = userid;
this.username = username;
this.password = password;
}
// 成员方法
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserDao.java
package com.huyonghua.dao;
import com.huyonghua.domain.User;
public interface UserDao {
public User findByUsername(String username);
}
UserMapper.xml
UserService.java
package com.huyonghua.service;
import com.huyonghua.domain.User;
public interface UserService {
public User findUserByName(String name);
}
UserServiceImpl.java
package com.huyonghua.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.huyonghua.dao.UserDao;
import com.huyonghua.domain.User;
import com.huyonghua.service.UserService;
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDao;
@Override
public User findUserByName(String name) {
// TODO Auto-generated method stub
return this.userDao.findByUsername(name);
}
}
UserController.java
package com.huyonghua.web;
import javax.servlet.http.HttpSession;
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.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.huyonghua.domain.User;
import com.huyonghua.service.UserService;
/**
* 用户控制器
*/
@Controller
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ModelAndView login(User model, HttpSession session) {
User user = userService.findUserByName(model.getUsername());
if (user == null || !user.getPassword().equals(model.getPassword())) {
return new ModelAndView("redirect:/login.jsp");
} else {
session.setAttribute("user", user);
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
return mav;
}
}
}
-
编写客户端代码
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
登录
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
主页
欢迎,${user.username }
-
发布项目到tomcat
右键项目-->run as-->run on server
本文源码已发布到我的github仓库,欢迎大家Fork and Star!
[email protected]:goldfather008/ssm.git
问题
tomcat运行报错。The Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config is missing. Check the server for errors.
原因:可能不小心删除了Project Explorer下的Server
解决办法:Window-Preferences-Server-Server Runtime Environments重新关联就可以了
查询数据库时发现报错Invalid bound statement (not found)
原因:mybaits的配置文件与接口调用没有对应,一般情况是Mapepr.xml文件中nameapce没有和mapper接口发生映射,导致mybatis绑定失败,检查是否正确配置映射
tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误。同时其他项目页面也不能访问。
关闭eclipse里面的tomcat,在tomcat安装目录下双击startup.bat手动启动tomcat服务器。访问http://localhost:8080/能正常访问tomcat管理页面。
原因:eclipse将tomcat的项目发布目录(tomcat 目录中的webapp)重定向了,所以你会发现在tomcat安装目录下的webapp目录里面找不到你的项目文件。
解决办法:重新配置下tomcat服务器:
在eclipse中的server页面,双击tomcat服务,会看到如图所示的配置页面:
可以看到红圈中选择的是 Use workspace metadata(does not modify Tomcat installion)
如果该tomcat中部署了项目的话,这红圈中的选项会灰掉不能修改,要修改必须得先把tomcat中的部署的服务都移除。
通过右键单击tomcat服务器选择 Add and Remove,在弹出的对话框中移除已部署的项目。移除完确定后,将看到上面的选项面板部分可编辑了。
选择Use tomcat installation(Task control of Tomcat installation) 即选择tomcat的安装目录来作为项目的发布目录。
然后,下来四行,看到"Deploy Path"了没?它后面的值默认是"wtpwebapps",把它改成"webapps",也就是tomcat
中发布项目所在的文件夹名字。
修改后关掉该页面,保存配置。这样就将项目部署到了tomcat安装目录下的webapp