02.搭建SSH
1.创建项目
在Eclipse中创建项目,右键解决报错即可导入MyEclipse中,防止Myeclipse中总是报错问题(注意jdk版本问题)
2.导包:
注意:最后有些许插件是否考虑安装:
war插件
源码插件
javadoc插件
3.整合Spring
添加Spring-MVC.xml的配置文件夹
见复制 F:\个人资料\总结\保存的文件\配置文件\SSH相关\spring-mvc.xml
(1)注意扫描接口包的位置base-package="com.git.user"
<context:component-scan base-package="com.git.user"></context:component-scan>
4.新建业务层接口UserService.java(位置com.git.user.service.UserService.java),定义一个测试接口方法:例如:
public interface UserService {
void test();
}
5.新建业务层接口实现类UserServiceImpl.java(位置com.git.user.serviceImpl.UserServiceImpl.java).实现接口方法,输出打印
@Service("userService")
public class UserServiceImpl implements UserService{
public void test() {
// TODO Auto-generated method stub
System.out.println("测试成功");
}
}
注意注解@Service("userService"),被Spring管理
6.新建测试类,测试Spring配置是否成功:
public class TestCase {
AbstractApplicationContext ctx;
UserService userService;
@Before
public void init(){
ctx=new ClassPathXmlApplicationContext("spring-mvc.xml");
userService=ctx.getBean("userService", UserService.class);
}
@After
public void destory(){
ctx.close();
}
@Test
public void testSpring(){
userService.test();
}
}
注意扫描文件:ctx=new ClassPathXmlApplicationContext("spring-mvc.xml");
测试是否能正常输出,如能正常输出,则spring配置成功.
7.配置web.xml并启动Tomcat.看是否报错
配置web.xml,配置了一个转发器和编码过滤器
8.配置Struts2的配置文件
见复制 F:\个人资料\总结\保存的文件\配置文件\SSH相关\struts.xml
9.新建UserAction.java控制器类,(位置:com.git.user.Action.UserAction.java))
测试代码如下:
(1)访问方式为/user/userAction!test.action
//ParentPackage("basePackage")被管理的包空间,对应于struts.xml中的
//
//中的name="basePackage"
@ParentPackage("basePackage")
//Namespace("/user")类似于RequestMapping("/user")
@Namespace("/user")
//Action("userAction")类似于Controller.
//其中userAction表示对整个UserAction类进行了注解,已经在struts.xml中配置了动态请求
//所以可以请求格式如/user/userAction!test.action的方式,对这个类下的test方法进行请求
@Action("userAction")
//这儿将由spring管理,是因为加载了一个插件struts2-spring-plugin
public class UserAction {
private static final Logger logger=Logger.getLogger(UserAction.class);
public void test(){
logger.info("进入aciton");
}
}
注意三个注解
(2)访问方式为:/user/userAction.action
也可以这样注解:
//ParentPackage("basePackage")被管理的包空间,对应于struts.xml中的
//
//中的name="basePackage"
@ParentPackage("basePackage")
//Namespace("/user")类似于RequestMapping("/user")
@Namespace("/user")
public class UserAction {
private static final Logger logger=Logger.getLogger(UserAction.class);
//Action("userAction")这样注解就类似于RequestMapping("/userAction")
//请求就可以写成/user/userAction.action
//以后的方法重新注解即可
@Action("userAction")
public void test(){
logger.info("进入aciton");
}
}
(3)完全基于spring的注解
(有待验证完善))
如果要测试完整的上下文信息:
//ParentPackage("basePackage")被管理的包空间,对应于struts.xml中的
//
//中的name="basePackage"
@ParentPackage("basePackage")
//Namespace("/user")类似于RequestMapping("/user")
@Namespace("/user")
//Action("userAction")类似于Controller.
//其中userAction表示对整个UserAction类进行了注解,已经在struts.xml中配置了动态请求
//所以可以请求格式如/user/userAction!test.action的方式,对这个类下的test方法进行请求
@Action("/userAction")
//这儿将由spring管理,是因为加载了一个插件struts2-spring-plugin
public class UserAction {
private static final Logger logger=Logger.getLogger(UserAction.class);
@Resource(name="userService")
private UserService userService;
public void test(){
logger.info("进入aciton");
//如果利用上下文进行测试的话,就需要以下代码获取到对象
// ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());
// UserService userService=ac.getBean("userService", UserService.class);
userService.test();
}
}
10.发布到Tomcat,启动Tomcat,进行action的访问localhost:8080/sshDemo/user/userAction!test.action的访问,若没有报错,则表示spring-struts整合成功
11.整合Hibernate4
11.1复制数据库连接配置文件db.properties
见复制 F:\个人资料\总结\保存的文件\配置文件\SSH相关\db.properties
11.2新建复制spring-db.xml配置文件,配置spring管理Hibernate
见复制 F:\个人资料\总结\保存的文件\配置文件\SSH相关\spring-db.xml
(1)注意<util:properties id="dbConfig" location="classpath:db.properties"></util:properties>中的location="classpath:db.properties"
(2)注意扫描位置
注意:此配置文件尚未完善需要完善,主要是读取配置文件XML中的值需要完善
11.3新建dao接口,位置com.git.user.dao.UserDao.java.编写一个接口方法如下:
public interface UserDao {
public Serializable save(User user);
}
11.4新建dao接口的实现类UserDaoImpl.位置com.git.user.dao.impl.UserDaoImpl.java,实现接口方法如下:
@Service("userDao")//注解Service和注解@Repository一样
@Transactional//注解事务,必须
public class UserDaoImpl implements UserDao{
@Resource(name="sessionFactory")
private SessionFactory sessionFactory;
public Serializable save(User user) {
// TODO Auto-generated method stub
return this.sessionFactory.getCurrentSession().save(user);
}
}
(1)注意注解Service("userDao").且这个包必须被spring管理
(2)注意注解事务Transactional
(3)注意调用hibernate中的sessionFactory方法保存数据到数据库this.sessionFactory.getCurrentSession().save(user);
11.5test测试,重新添加测试方法如下:
public class TestCase {
AbstractApplicationContext ctx;
UserService userService;
UserDao userDao;
@Before
public void init(){
ctx=new ClassPathXmlApplicationContext("spring-mvc.xml","spring-db.xml");
userService=ctx.getBean("userService", UserService.class);
userDao=ctx.getBean("userDao", UserDao.class);
}
@After
public void destory(){
ctx.close();
}
@Test
public void testSpring(){
userService.test();
}
@Test
public void testHibernate(){
User user=new User();
user.setId(UUID.randomUUID().toString());
user.setName("小xiaoliud");
user.setPwd("123456");
user.setCeatedatetime(new Date());
user.setModifydatetime(new Date());
userDao.save(user);
}
11.6可能出现的报错有:
(1)Error creating bean with name 'transactionManager' defined in class path resource [spring-db.xml]......
解决方法是:检查web.xml里面是否配置这个:
还有可能jar包不匹配,注意导入hibernate的jar包版本为4.2.6可以使用
(2) No Session found for current thread..............
解决方法:在spring-db.xml中的
解放方法1:要么启动监听器配置事务
解决方法2:如果启动注解配置事务,那么就要在UserDaoImpl上添加上注解@Transactionaler而不是serviceImpl上添加
12.最后的Action测试,添加一个action类,模拟前端访问并注册功能,添加如下方法:
public void test2(){
User user=new User();
user.setId(UUID.randomUUID().toString());
user.setName("小xiaoliudf");
user.setPwd("123456");
user.setCeatedatetime(new Date());
user.setModifydatetime(new Date());
userService.save(user);
}
删除Tomcat中的项目,重新部署进Tomcat,否则会报错,前端访问,查看数据库是否正常插入数据,如果插入了数据,则表示全部整合完成
13.配置log4j
见复制 F:\个人资料\总结\保存的文件\配置文件\log4j.properties
log4j的使用:
在类里添加:private static final Logger logger=Logger.getLogger(UserServiceImpl.class);
14.测试前端传递数据到服务器,服务器返回json数据给前端的ajax请求:代码如下:
public void test2(){
String name=ServletActionContext.getRequest().getParameter("name");
String pwd=ServletActionContext.getRequest().getParameter("pwd");
logger.info(name+";"+pwd);
User user=new User();
user.setId(UUID.randomUUID().toString());
user.setName(name);
user.setPwd(pwd);
user.setCeatedatetime(new Date());
user.setModifydatetime(new Date());
userService.save(user);
try {
Map<String,Object> map=new HashMap<String,Object>();
map.put("success", true);
map.put("msg", "注册成功");
ServletActionContext.getResponse().setCharacterEncoding("UTF-8");
ServletActionContext.getResponse().getWriter().write(JSON.toJSONString(map));;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
前端AJAX请求:
15.struts2中基于注解的访问请求:
在方法上面添加如下注解:
@Action(value="/userAction",results={
@Result(name="success",location="/web/index.jsp")
@Result(name="error",location="/web/error.jsp")
})
16.Struts2中接收前端form表单参数的传递方法有四,其中三种为:
第一种为:
private String username;
private String password;
然后get.set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
logger.info("name="+name);
User user=new User();
user.setName(name);
user.setPwd(pwd);
user.setId(UUID.randomUUID().toString());
user.setCeatedatetime(new Date());
user.setModifydatetime(new Date());
userService.save(user);
前端AJAX传输相同:
data:{
"name"😒("#name").val(),
"pwd"😒("#pwd").val()
},
第二种为,对象传递方法:
User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
logger.info("name="+user.getName());
user.setId(UUID.randomUUID().toString());
user.setCeatedatetime(new Date());
user.setModifydatetime(new Date());
logger.info("user"+user.toString());
userService.save(user);
jsp前端AJAX传输需要这样传输,对象的属性:
data:{
"user.name"😒("#name").val(),
"user.pwd"😒("#pwd").val()
},
方法中,就自动接收到了
第三种:通过request请求的到:
String name=ServletActionContext.getRequest().getParameter("name");
String pwd=ServletActionContext.getRequest().getParameter("pwd");

浙公网安备 33010602011771号