废话少说,直接上代码
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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts -->
<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>/*</url-pattern>
</filter-mapping>
<!-- Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- utf-8编码 -->
<filter>
<filter-name>Spring character encoding filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring character encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 使Spring关注Annotation -->
<context:annotation-config />
<!-- 使用annotation 自动注册bean(@Respository,@Component),并检查@Required,@Autowired的属性已被注入 -->
<context:component-scan base-package="com.action" />
<bean id="testLog" class="com.aop.MyLog"></bean> <!--将日志类注入到bean中。 -->
<aop:config>
<aop:aspect id="b" ref="testLog"><!--调用日志类 -->
<aop:pointcut id="log"
expression="execution(* com.action.*.*(..))" /><!--配置在log包下所有的类在调用之前都会被拦截 -->
<aop:before pointcut-ref="log" method="before" /><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的before方法 -->
<aop:after pointcut-ref="log" method="after" />
<!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的after方法 -->
</aop:aspect>
</aop:config>
</beans>
MyLog.java
package com.aop;
import org.aspectj.lang.JoinPoint;
public class MyLog {
public void before(JoinPoint joinpoint) {
String classname = joinpoint.getTarget().getClass().getName();
String method = joinpoint.getSignature().getName();
Object[] args = joinpoint.getArgs();
System.out.println("classname====" + classname);
System.out.println("method====" + method);
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]====" + args[i]);
}
System.out.println("方法执行前打印");
}
public void after(JoinPoint joinpoint) {
System.out.println("方法执行后打印");
}
}
BaseAction
package com.action;
import java.io.IOException;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
/**
* @className:BaseAction.java
* @classDescription:父类Action,包括一些通用的方法
* @author:xiayingjie
* @createTime:2010-6-24
*/
@SuppressWarnings("serial")
@Controller
@Scope("prototype")
public abstract class BaseAction extends ActionSupport implements
ServletRequestAware, ServletResponseAware {
/** 进行增删改操作后,以redirect方式重新打开action默认页的result名. */
public static final String RELOAD = "reload";
protected HttpServletRequest request;
protected HttpServletResponse response;
boolean flag;
// -- 定义Service --//
// -- 简化分页 --//
/**
* Action函数, 默认的action函数, 默认调用list()函数.
*/
public String execute() throws Exception {
return list();
}
// -- CRUD Action函数 --//
/**
* Action函数,显示Entity列表界面. return SUCCESS.
*/
public abstract String list() throws Exception;
/**
* Action函数,显示新增或修改Entity界面. return INPUT.
*/
public abstract String alter() throws Exception;
/**
* Action函数,新增或修改Entity. return RELOAD.
*/
public abstract String save() throws Exception;
/**
* Action函数,删除Entity. return RELOAD.
*/
public abstract String delete() throws Exception;
// -- 简化取值----//
/**
* 取得HttpRequest中Parameter的简化方法.
*/
public String getParameter(String name) {
return (null == this.request.getParameter(name)) ? null : this.request
.getParameter(name);
}
/**
* 取得HttpRequest中Attribute的简化函数.
*/
public Object getRequestAttribute(String name) {
return request.getAttribute(name);
}
/**
* 取得HttpSession中Attribute的简化函数.
*/
public Object getSessionAttribute(String name) {
return this.getSession().getAttribute(name);
}
/**
* 取得HttpSession的简化函数.
*/
public HttpSession getSession() {
return request.getSession();
}
/**
* 设置HttpRequest中Attribute的简化函数.
*/
public boolean setRequestAttribute(String key, Object object) {
try {
flag = false;
request.setAttribute(key, object);
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 设置HttpSession中Attribute的简化函数.
*/
public void setSessionAttribute(String name, Object object) {
getSession().setAttribute(name, object);
}
/**
* 获取根目录
*/
public String getRoot() {
return request.getContextPath();
}
/**
* 获取根目录
*/
public String getRealRoot() {
return this.getSession().getServletContext().getRealPath("/");
}
// -------自动生成----------//
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
// ---------自动生成 service 的get set方法----------//
/**
* @return the userManageService
*/
}
UserManageAction.java
package com.action.manage;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.action.BaseAction;
@Namespace("/manage")
@Results({
@Result(name = "success", location = "/index.jsp"),
@Result(name = BaseAction.RELOAD, location = "/manage/user-manage.action", type = "redirect") })
public class UserManageAction extends BaseAction {
// 此类中方法可以写任意多个。我只写一个
/**
*
*/
private static final long serialVersionUID = -2536997671753457354L;
public String test() {
System.out.println("测试类的test方法被调用");
return "success";
}
@Override
public String list() throws Exception {
System.out.println("测试类的list方法被调用");
return "success";
}
@Override
public String alter() throws Exception {
System.out.println("测试类的alter方法被调用");
return RELOAD;
}
@Override
public String save() throws Exception {
System.out.println("测试类的save方法被调用");
return RELOAD;
}
@Override
public String delete() throws Exception {
System.out.println("测试类的delete方法被调用");
return RELOAD;
}
}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<a href="<%=basePath%>manage/user-manage.action">list</a>
<br />
<a href="<%=basePath%>manage/user-manage!delete.action">delete</a>
<br />
<a href="<%=basePath%>manage/user-manage!test.action">test</a>
<br />
<a href="<%=basePath%>manage/user-manage!save.action">save</a>
<br />
<a href="<%=basePath%>manage/user-manage!alter.action">alter</a>
</body>
</html>
代码能进入AOP,但是老是报错找不到这个方法异常,不知道是什么原因。
分享到:
相关推荐
总的来说,Spring、Struts2和iBatis的整合为Java Web开发提供了一个强大、灵活的解决方案,让开发者能够更专注于业务逻辑,而不是框架的底层实现。通过合理的配置和使用这个jar包,开发者可以快速构建出稳定、高性能...
在IT行业中,SSH(Spring、Struts2、Hibernate)是一个经典的Java Web开发框架组合,而Redis则是一个高性能的键值存储系统,常用于缓存和数据持久化。将SSH与Redis整合,可以提升应用程序的性能和响应速度。下面将...
《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...
通过以上步骤,你就能完成一个基本的JPA+Spring+Struts整合应用。这种整合方式能充分利用每个框架的优点,提高代码的可维护性和可扩展性,降低开发复杂度。在实际项目中,你可能还需要考虑异常处理、安全控制、性能...
"Spring+Struts2+MyBatis整合"是一个常见的Java Web开发组合,旨在提供强大的控制层、灵活的数据访问以及良好的企业级服务。下面将详细介绍这三个框架以及它们整合的关键点。 **Spring框架**是Java应用开发的核心...
通过Spring,可以将CXF和Struts2整合起来,使得各个组件之间的协作变得更加流畅。 【Struts2】是ActionServlet的一个实现,用于处理HTTP请求。Struts2.3.4版本包含了一些关键改进,如增强了拦截器的灵活性,提供了...
在一个典型的"hibernate+spring+struts"整合项目中,它们的角色如下: - **Struts** 作为前端控制器,接收用户请求,根据配置决定调用哪个业务逻辑方法。 - **Spring** 用于管理依赖注入(DI),包括Hibernate的...
"hibernate+spring+struts整合开发jar文件"提供了这些框架所需的库文件,帮助开发者快速搭建开发环境,避免了因版本不兼容或缺失jar文件导致的问题。 1. Hibernate:作为Java领域的一个ORM(Object-Relational ...
**Spring、Struts2 和 iBatis 整合详解** 在Java Web开发中,Spring、Struts2 和 iBatis 是三个非常重要的框架。它们分别负责不同层面的任务:Spring 提供了全面的依赖注入(DI)和面向切面编程(AOP),用于管理...
本实例关注的是“ibatis+Spring+struts2”的整合,这是一个经典的Java Web开发组合,用于实现数据访问、业务逻辑控制和用户界面交互。下面我们将深入探讨这三个组件及其整合的关键知识点。 1. **iBATIS**:iBATIS...
"ibatis+spring+struts2 整合开发例子"就是一个典型的Java Web应用集成开发案例,旨在帮助开发者理解和掌握这三大框架的协同工作原理。接下来,我们将详细讨论这三个组件以及它们的整合过程。 Ibatis是一个轻量级的...
### Spring与Struts整合的三种主要方式 在Java Web开发领域,Spring框架和Struts框架都是非常重要的技术。Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)功能,为Java应用提供了轻量级的解决方案。而...
在本整合中,Spring 2.5.6版本主要作为业务逻辑的管理和协调者,它可以通过配置文件管理Bean的生命周期,同时与Hibernate和Struts进行无缝集成。 Hibernate 3.2是一个流行的ORM(对象关系映射)工具,它消除了...
在这个"spring+struts+mybatis整合项目"中,我们将深入探讨这三个框架如何进行集成,以及它们各自的核心功能。 **Spring框架** 是一个全面的企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等...
**Spring+Struts2+JPA 整合详解** 在Java Web开发中,Spring、Struts2和JPA是三个非常重要的框架。Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;Struts2是一个强大的MVC框架...
将Spring、Struts和Hibernate整合在一起,可以构建出高效、可维护的企业级Web应用。整合过程中,Spring通常作为全局的上下文容器,管理Struts的Action和Hibernate的SessionFactory。Struts负责处理HTTP请求,调用...
SSH框架整合使用时,Spring作为整体的协调者,负责管理Struts和Hibernate的生命周期,以及它们之间的依赖。Struts处理用户交互,Spring通过AOP进行事务管理,而Hibernate则负责数据持久化。 具体来说,Spring可以...
Spring的主要功能包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问/集成、模型-视图-控制器(MVC)等。在SSM架构中,Spring主要负责控制反转和业务逻辑的管理,同时也作为数据访问层与视图层之间的粘合剂。 ...
总的来说,"struts2+spring+mybatis+easyui"的实现是一个标准的Java Web项目结构,它利用Maven进行构建管理,通过整合四个组件,实现了后端的业务逻辑处理、数据访问和前端的用户界面展示。这种架构在实际开发中具有...
Spring与MyBatis的整合,通过Spring的JDBC模板和事务管理,可以实现数据库操作的自动化和事务的一致性。 在这个"Spring+Struts2+MyBatis完整框架"中,通常会有以下组件和配置: 1. **DispatcherServlet**:Spring ...