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怎么调用呢?
String store_path = request.getServletContext().getRealPath("xxx");
ApplicationContext context = new FileSystemXmlApplicationContext(
store_path + "/applicationContext.xml");
UsersService us = (UsersService) context
.getBean("usersService"); 这个是struts1.x的,struts2怎么调用呢?
解决方案 »
- 急啊???
- JSP param问题
- 如何用url来访问形式来访问位于web目录以外的文件?
- 求 JSP 接收一个或多个上传文件,并将文件放入 sqlserver 数据库例子 ,我用的是 netbean6 ,Apache Tomcat 6.0.14
- jsp连接sql
- 请问,利用JSP如何对数组进行升序排列?
- 帮我看看,jsp代码为什么有错误!
- java 与 discuz 整合 中文有户名无法同步登录
- 我开发了个网站用的是ORACLE数据库,和TOMCAT,(他们都装在我的笔记本上),如果我访问我做的网站,必须插网线
- <%! String pnum = request.getParameter("pnum")%>这句是否有错?(request能否存在于JSP的声明中)
- 关于servlet
- ajax提交表单获得后台返回值的问题
private LogOrdersMng getOrdersMng() {
return (LogOrdersMng) BeanContainer.getBean(LogOrdersMng.class);
}
上面的Mng和你的Service是一个意思,都是业务层接口,
/**
* 分页查询订单
* @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能理解这段逻辑, 业务程序逻辑才是问题的关键!
<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>