一、准备工作
1、创建新的web项目
2、导入jar包
-
spring的jar包
-
sturts2的jar包
3、创建相应的文件
- 创建Action
- 创建Service
-
创建Dao
4、配置spring
5、配置struts2
6、配置struts2的过滤器
二、代码
UserDao.java
package work.zhangdoudou.Dao;
public class UserDao {
public void addUser() {
System.out.println("dao----------");
}
}
UserService.java
package work.zhangdoudou.Service;
import work.zhangdoudou.Dao.UserDao;
public class UserService {
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add() {
System.out.println("service------");
userDao.addUser();
}
}
UserAction.java
package work.zhangdoudou.Action;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.opensymphony.xwork2.ActionSupport;
import work.zhangdoudou.Service.UserService;
public class UserAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("Action--------------");
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService)context.getBean("userService");
userService.add();
return NONE;
}
}
spring配置applicationContext.xml
struts2配置struts.xml
/index.jsp
过滤器web.xml
spring_day02_2SpringStruts2
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
log4j.properties
log4j.rootLogger=info, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
# Print the date in ISO 8601 format
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN
三、运行结果
四、分析改良
1、分析:
- 这样的项目每次访问action都要加载spring的配置文件
- 项目运行效率低
2、解决方案
(1)在服务器启动的时候,创建对象加载配置文件
(2)使用底层监听器、servletContext对象
3、spring里面不需要我们自己写代码,已经封装好了
(1)spring封装了一个监听器,只需要配置监听器就可以了
(2)配置监听器之前要导入spring整合web的jar包
(3)指定加载spring配置文件的位置
- 不指定会异常
- 默认加载/WEB-INF/applicationContext.xml这个文件
- 我的文件在src下
-
加载配置文件
(4)把Action创建交给spring管理
-
导入jar包,这个包struts2提供
-
spring创建Action
-
struts2加载创建好的action
4、改良后的代码
UserDao.java
package work.zhangdoudou.Dao;
public class UserDao {
public void addUser() {
System.out.println("dao----------");
}
}
UserService.java
package work.zhangdoudou.Service;
import work.zhangdoudou.Dao.UserDao;
public class UserService {
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add() {
System.out.println("service------");
userDao.addUser();
}
}
UserAction.java
public class UserAction extends ActionSupport {
UserService userService;
@Override
public String execute() throws Exception {
System.out.println("Action--------------");
// ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
// UserService userService=(UserService)context.getBean("userService");
userService.add();
return NONE;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
applicationContext.xml
struts.xml
/index.jsp
web.xml
spring_day02_2SpringStruts2
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
log4j.properties
log4j.rootLogger=info, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
# Print the date in ISO 8601 format
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN