spring的配置文件中配置:
<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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
default-lazy-init="true" default-autowire="byName">
<context:annotation-config />
<context:component-scan base-package="com.startdima.common.*"></context:component-scan>
</beans>
struts配置文件中配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.objectFactory" value="spring"></constant>
<package name="user" extends="struts-default" namespace="/">
<action name="login" class="loginAction">
<result name="success">/main.jsp</result>
<result name="error">/view/common/errorRedirect.jsp</result>
</action>
</package>
</struts>
注:name为strus2框架拦截的login请求路径,class为spring自动扫描注解@Controller("xxx")中的xxx名字,若不写则为默认的类名第一个字母小写
当然,还可以配置调用的方法
控制层:
package com.startdima.common.login.action;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
import com.startdima.common.login.service.UserService;
import com.startdima.common.pojo.TUser;
/**
*
* @author qiss
* 登陆
*/
@Controller
public class LoginAction extends ActionSupport
{ @Resource
UserService uService;//为实现类service的接口
private String name;
private String password;
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 execute() throws Exception {
System.out.println("测试,登陆成功");
TUser tUser= uService.findUser("sss", "fff");
System.out.println(tUser.getName());
return "success";
}
}
注:
@Resource(name="xxx") 其中xxx为若不写则为默认为接口实现类类名第一个字母小写
服务层:
package com.startdima.common.login.service;
import java.util.List;
import com.startdima.common.exception.LoginException;
import com.startdima.common.pojo.TUser;
/**
*
* @author qiss
*
*/
public interface UserService
{
public TUser findUser(String name, String password) throws LoginException;
}
package com.startdima.common.login.service.impl;
import org.springframework.stereotype.Service;
import com.startdima.common.exception.LoginException;
import com.startdima.common.login.dao.UserDao;
import com.startdima.common.login.dao.impl.UserDaoimpl;
import com.startdima.common.login.service.UserService;
import com.startdima.common.pojo.TUser;
/**
*
* @author qiss
*
*/
@Service
public class UserServiceImpl implements UserService
{
private UserDao userDao=new UserDaoimpl();
public void setKhuserDao(UserDao userDao) {
this.userDao = userDao;
}
public TUser findUser(String name, String password) throws LoginException
{
TUser user=null;
try
{
// user=userDao.checkUser(name, password);
}
catch (Exception e)
{
e.printStackTrace();
}
//测试代码
user=new TUser();
user.setName("aaa");
return user;
}
}
以下内容来源于网络
-----------常用注解--------
--定义Bean的注解
@Controller
@Controller("Bean的名称")
定义控制层Bean,如Action
@Service
@Service("Bean的名称")
定义业务层Bean
@Repository
@Repository("Bean的名称")
定义DAO层Bean
@Component
定义Bean, 不好归类时使用.
--自动装配Bean (选用一种注解就可以)
@Autowired (Srping提供的)
默认按类型匹配,自动装配(Srping提供的),可以写在成员属性上,或写在setter方法上
@Autowired(required=true)
一定要找到匹配的Bean,否则抛异常。 默认值就是true
@Autowired
@Qualifier("bean的名字")
按名称装配Bean,与@Autowired组合使用,解决按类型匹配找到多个Bean问题。
@Resource JSR-250提供的
默认按名称装配,当找不到名称匹配的bean再按类型装配.
可以写在成员属性上,或写在setter方法上
可以通过@Resource(name="beanName") 指定被注入的bean的名称, 要是未指定name属性, 默认使用成员属性的变量名,一般不用写name属性.
@Resource(name="beanName")指定了name属性,按名称注入但没找到bean, 就不会再按类型装配了.
@Inject 是JSR-330提供的
按类型装配,功能比@Autowired少,没有使用的必要。
--定义Bean的作用域和生命过程
@Scope("prototype")
值有:singleton,prototype,session,request,session,globalSession
@PostConstruct
相当于init-method,使用在方法上,当Bean初始化时执行。
@PreDestroy
相当于destory-method,使用在方法上,当Bean销毁时执行。
--声明式事务
@Transactional
struts2巧妙实现0配置
省去一切struts2中Action的配置,当我们访问account/add.action时,自动调用AccountAction.add()方法。
如果我们想调用TestAction中的delete()方法,可以直接通过test/delete.action去调用。
在这里,我们采用的约定大于配置,如xxx/yyy.action,xxx对应Action的名字,此处对应xxxAction,yyy对应方法名.
web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<!-- springListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
applicationContext.xml
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.example"></context:component-scan>
struts.xml,此部分是关键
<constant name="struts.i18n.encoding" value="GBK"></constant>
<constant name="struts.objectFactory" value="spring"></constant>
<constant name="struts.enable.SlashesInActionNames" value="true"></constant>
<package name="restful" extends="struts-default">
<action name="*/*" class="{1}Action" method="{2}">
<result name="success">${forward_page}</result>
<result name="redirect" type="redirect">${redirect_page}</result>
</action>
</package>
BaseAction(简化Action的使用)
public class BaseAction
{
public static final String SUCCESS = "success";
public static final String REDIRECT = "redirect";
private String forward_page;
private String redirect_page;
//转发
public String forward(String viewPath)
{
forward_page = viewPath;
return SUCCESS;
}
//重定向
public String redirect(String viewPath)
{
redirect_page = viewPath;
return REDIRECT;
}
//添加属性
public BaseAction addAttr(String key, Object value)
{
Map<String, Object> request = (Map<String, Object>) ActionContext
.getContext().get("request");
request.put(key, value);
return this;
}
public String getForward_page()
{
return forward_page;
}
public String getRedirect_page()
{
return redirect_page;
}
}
自定义的Action,需要继承BaseAction
@Controller
public class AccountAction extends BaseAction
{
public String add()
{
//转发
return forward("/add.jsp");
}
public String get()
{
//重定向
return redirect("get.jsp");
}
public String list()
{
@SuppressWarnings("unchecked")
List list = new ArrayList();
int count = 10;
// 添加属性及跳转
return addAttr("list", list).addAttr("count", count).forward(
"/list.jsp");
}
}