struts2 过滤器怎么调用业务层
 
   String store_path = request.getServletContext().getRealPath("xxx");  
        ApplicationContext context = new FileSystemXmlApplicationContext(  
                                store_path + "/applicationContext.xml");  
                       UsersService us = (UsersService) context  
                                .getBean("usersService");  这个是struts1.x的,struts2怎么调用呢?

解决方案 »

  1.   


    private LogOrdersMng getOrdersMng() {
    return (LogOrdersMng) BeanContainer.getBean(LogOrdersMng.class);
    }
    上面的Mng和你的Service是一个意思,都是业务层接口,
      

  2.   

    数据层接口public interface LogOrdersDao extends BaseDao<LogOrders> {

    /**
     * 分页查询订单
     * @param orders 查询条件
             * @param pageIndex 当前页数
             * @param radix 每页个数
     * @return PageModel 分页的实体
     */
    public PageModel getOrders(LogOrders orders, int pageIndex, int radix);

    /**
     * 根据订单编号获得订单
     * @param orderCode 订单编号
     * @return LogOrders 订单实体
     */
    public LogOrders getBean(String orderCode);}数据层接口实现类@ServiceBean
    public class LogOrdersDaoImpl extends BaseDaoImpl<LogOrders> implements LogOrdersDao { // 分页查询订单
    public PageModel getOrders(LogOrders orders, int pageIndex, int radix) {
    String sql = "select * from 订单表 where DEPT_NAME = ?";
    List<Object> args = new ArrayList<Object>();
    args.add(orders.getDeptName());
    if (null != orders.getPactCode() && !"".equals(orders.getPactCode())) {
    sql += " and PACT_CODE like ?";
    args.add("%" + orders.getPactCode() + "%");
    }
    if (null != orders.getOrderCode() && !"".equals(orders.getOrderCode())) {
    sql += " and ORDER_CODE like ?";
    args.add("%" + orders.getOrderCode() + "%");
    }
    sql += " order by ORDERS_ID desc";
    return getPage(sql, args.toArray(), pageIndex, radix, orders.getFunction());
    } // 根据订单编号获得订单
    public LogOrders getBean(String orderCode) {
                    /**纯sql语句,这里采用jdbc+连接池的方式访问数据库,查询出来的数据自动封装到自定义的实体类中。经过测试,查询1000条数据,这种方式比hibernate快0.1秒*/
    return getObject("select * from 订单表 where ORDER_CODE = ?", new Object[] { orderCode });
    }}业务层接口public interface LogOrdersMng extends BaseManager<LogOrders> {

    /**
     * 分页查询订单
     * @param orders 查询条件
             * @param pageIndex 当前页数
             * @param radix 每页个数
     * @return PageModel 分页的实体
     */
    public PageModel getOrders(LogOrders orders, int pageIndex, int radix);

    /**
     * 根据订单编号获得订单
     * @param orderCode 订单编号
     * @return LogOrders 订单实体
     */
    public LogOrders getBean(String orderCode);}业务层接口实现类@ServiceBean
    public class LogOrdersMngImpl extends BaseManagerImpl<LogOrders> implements LogOrdersMng {

    @MatchingBean
    public LogOrdersDao dao;// 自动注入javabean

    public LogOrdersDao getDao() {// 必须重写父类的方法才能完全拥有的父类的所有功能
    return dao;
    } // 分页查询订单
    public PageModel getOrders(LogOrders orders, int pageIndex, int radix) {
    return dao.getOrders(orders, pageIndex, radix);
    } // 根据订单编号获得订单
    public LogOrders getBean(String orderCode) {
    return dao.getBean(orderCode);
    }}action代码/**
    * name 表示action的名称,用来生成url,供外部访问,
    * interceptor 表示执行这个action之前必须通过的拦截器
    */
    @ActionBean(name = "/admin/flow/orders", interceptor = "itemRoleInter")
    public class LogOrdersAction extends CoreAction {

    private static final Logger log = LoggerFactory.getLogger(LogOrdersAction.class);
    private static final String LIST = "/admin/indent/list/new_list.jsp";

    /***
     * 订单列表
     * @return String
     */
    public String list() {
    log.info("订单列表");
    pageModel = mng.getOrders(bean, pageIndex, radix);
    return LIST;// 返回列表页面
    }

    @MatchingBean
    public LogOrdersMng mng;// 自动注入javabean
    private LogOrders bean;// 查询条件也会自动封装

    public LogOrders getBean() {
    return bean;
    }

    public void setBean(LogOrders bean) {
    this.bean = bean;
    }

    }拦截器代码:@InterceptorBean(name = "itemRoleInter")
    public class ItemRoleInter implements Interceptor {

    private static final Logger log = LoggerFactory.getLogger(ItemRoleInter.class); @SuppressWarnings("unchecked")
    public String advance(HttpServletRequest request, HttpServletResponse response) throws FrameworkException {                System.out.println(getOrdersMng().getBean("订单编号"));// 调用业务层接口的方法 String requestURI = request.getRequestURI();// 用户访问的url
    log.info("请求路径:" + requestURI);
    String loginPath = Privilege.DISPOSE_LOGIN_PAGE;// 处理登录页面

    HttpSession session = request.getSession();
    User user = (User) session.getAttribute(User.REF);
    if (null == user) {// 用户没有登录或已经过期
    session.setAttribute(User.TARGET_URL, requestURI);
    return loginPath;
    }

    String sessionid = (String) session.getServletContext().getAttribute(user.getLoginName());
    if (null == sessionid || (!sessionid.equals(session.getId()))) {// 单点登录
    session.setAttribute(User.TARGET_URL, requestURI);
    return loginPath;
    }

    if (User.SUPER_MANAGER_NAME.equals(user.getLoginName())) {// 超级管理员畅通无阻
    return null;
    }

    Set<String> privSet = (Set<String>) session.getAttribute(User.PRIV_KEY);// 登录用户的权限中的url集合
    if (null != privSet && privSet.contains(request.getServletPath())) {
    return null;
    } else {// 没有权限
    return Privilege.NOT_ROLE_PAGE;
    }
    }        // 手动抓取javabean
            private LogOrdersMng getOrdersMng() {
                // 这行代码在任何只要存在java代码的角落里都有效
                return (LogOrdersMng) BeanContainer.getBean(LogOrdersMng.class);
            }}
    虽然这个不是ssh框架
    (这个是这里内部使用的,只有一个jar,整个项目只有一个配置文件,开发效率和运行效率都要高于ssh)
    但是不管什么框架,它们的原理(或者说思想)都大同小异,
    希望lz能理解这段逻辑, 业务程序逻辑才是问题的关键!
      

  3.   

    配置文件:<?xml version="1.0" encoding="UTF-8"?>
    <beans>

    <context basePackage="com.test" />

    <config name="db" path="/jdbc.properties" />

    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" config="db.jdbc.driverClassName" />
    <property name="jdbcUrl" config="db.jdbc.url" />
    <property name="user" config="db.jdbc.username" />
    <property name="password" config="db.jdbc.password" />
    <property name="autoCommitOnClose" value="true" />
    <property name="maxStatements" config="db.cpool.maxStatements" />
    <property name="checkoutTimeout" config="db.cpool.checkoutTimeout" />
    <property name="idleConnectionTestPeriod" config="db.cpool.idleConnectionTestPeriod" />
    <property name="initialPoolSize" config="db.cpool.minPoolSize" />
    <property name="minPoolSize" config="db.cpool.minPoolSize" />
    <property name="maxPoolSize" config="db.cpool.maxPoolSize" />
    <property name="maxIdleTime" config="db.cpool.maxIdleTime" />
    <property name="acquireIncrement" config="db.cpool.acquireIncrement" />
    <property name="maxIdleTimeExcessConnections" config="db.cpool.maxIdleTimeExcessConnections" />
    </bean>

    <bean name="jdbcConfig" class="zl.framework.entity.JdbcConfig">
    <property name="dataSource" ref="dataSource" /><!-- 数据源 -->
    <property name="jdbcPackage" value="com.test.entity" /><!-- 实体类的包,多个包用逗号隔开 -->
    <property name="showSql" value="true" /><!-- 是否在控制台打印sql语句 -->
    <property name="databaseType" value="oracle" /><!-- 数据库类型 -->
    <property name="createSqlFile" value="true" /><!-- 是否在classes目录下生成建表语句的sql文件 -->
    </bean>

    </beans>web.xml<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <servlet>
    <servlet-name>Control</servlet-name>
    <servlet-class>zl.framework.web.BeanControlServlet</servlet-class>
    <init-param>
           <param-name>config</param-name>
           <param-value>/WEB-INF/classes/context.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>Control</servlet-name>
    <url-pattern>*.php</url-pattern>
    </servlet-mapping>

       <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
       </welcome-file-list>
    </web-app>