开发环境

  • 开发工具:Eclipse
  • 数据库:MySQL
  • server:Tomcat

Struts2 请求原理流程图

构建一个 web maven project,在pom.xml引入struts2的jar包

        <!-- struts2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.1.2</version>
</dependency>

在 web.xml 文件里引入struts2的过滤器

    <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>

測试流程

  1. 创建一个TestAction类
package com.gx.action;

public class TestAction {

    public String helloworld(){

        return "hello";
}
}

2.在resources下创建struts.xml和test.xml文件

  • test.xml
<?

xml version="1.0" encoding="UTF-8"?

>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="userPkg" namespace="/testspace" extends="struts-default">
<!-- http://localhost:8080/manningSampleApp/packageNamespace/actionName_method --> <action name="testAction_*" class="com.gx.action.TestAction" method="{1}"> <result name="hello">/WEB-INF/test.jsp</result>
</action>
<!--
<action ...
--> </package> </struts>
  • 在struts.xml文件里引入user.xml
<?xml version="1.0" encoding="UTF-8"?

>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts> <include file="test.xml"></include> </struts>

3.浏览器输入:http://localhost:8080/struts2curd/testspace/testAction_helloworld

4. 结果:

写控制层代码

  • BaseAction
package com.gx.base;

import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
import java.util.Map; import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
*
* BaseAction类
* 继承ActionSupport和实现了ModelDriven接口
* @author always
*
* @param <T>
*/
public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{ protected T model=null; protected Class<T> modelClass; /*存放json数据,用来实现ajax*/
protected Map<String, Object> jsonMap=new HashMap<String, Object>(); public BaseAction(){
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
modelClass=(Class) pt.getActualTypeArguments()[0];
}
public T getModel() { if(model==null){
try {
model=modelClass.newInstance(); } catch (final Exception e) {
LOG.error(e.getMessage());
}
}
return model;
}
public Map<String, Object> getDataMap() {
return jsonMap;
}
public void setJsonMap(Map<String, Object> jsonMap{
this.jsonMap = jsonMap;
} }
  1. SimpleMethodAction
package com.gx.base;

/**
* 基本curd方法的空实现,方便统一管理
*
* @author always
*
* @param <T>
*/
public abstract class SimpleMethodAction<T> extends BaseAction<T>{ /**
* 列表
* @return
* list.jsp
*/
public String list(){ return "list";
} /**
* 删除
* @return
* toList-->actionName_list-->list.jsp(user.xml中配置)
*/
public String delete(){ return "toList";
} /**
* 改动
* @return
* toList-->actionName_list-->list.jsp
*/
public String edit(){ return "toList";
} /**
* 改动页面
* @return
* saveUI.jsp
*/
public String editUI(){ return "saveUI";
} /**
* 加入
* @return
* toList-->actionName_list-->list.jsp
*
*/
public String add(){ return "toList";
} /**
* 加入页面
* @return
* saveUI.jsp
*/
public String addUI(){ return "saveUI";
}
}
  1. user.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="userPkg" namespace="/user" extends="json-default">
<!-- http://localhost:8080/manningSampleApp/packageNamespace/actionName_method -->
<!-- 普通用户管理 -->
<action name="userAction_*" class="com.gx.web.struts2.UserAction" method="{1}">
<!--
sturts框架自己主动转
要在pom.xml引入 <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.2.3</version>
</dependency>
-->
<result type="json">
<param name="root">jsonMap</param>
</result>
<result name="list">/WEB-INF/jsp/user/list.jsp
</result>
<result name="saveUI">/WEB-INF/jsp/user/saveUI.jsp
</result>
<result name="toList" type="redirectAction">userAction_list</result>
</action> </package> </struts>
  1. UserAction
package com.gx.web.struts2;

import org.apache.log4j.Logger;

import com.gx.base.SimpleMethodAction;
import com.gx.domain.PageBean;
import com.gx.domain.User;
import com.gx.service.UserService;
import com.gx.service.impl.UserServiceImpl;
import com.opensymphony.xwork2.ActionContext; /**
* 继承SimpleMethodAction
* @author always
*
*/
public class UserAction extends SimpleMethodAction<User> { /**
*
*/
private static final long serialVersionUID = -8771772792039694213L; static Logger log = Logger.getLogger(UserAction.class);
private UserService userService = new UserServiceImpl(); /*删除,改动 用户时传来的id*/
private int userId;
/*分页*/
private int pageNum = 1; @Override
public String list() { ActionContext ac = ActionContext.getContext(); PageBean pageBean = userService.getPageBean(pageNum, 5); ac.getValueStack().push(pageBean); return super.list();
} public String listJson() { jsonMap.clear();
ActionContext ac = ActionContext.getContext();
PageBean pageBean = userService.getPageBean(pageNum, 5); jsonMap.put("pageBean", pageBean);
jsonMap.put("success", true);
return SUCCESS;
} @Override
public String delete() {
userService.delete(userId);
return super.delete();
} @Override
public String edit() { User model = this.getModel();
userService.update(model); return super.edit();
} @Override
public String editUI() { log.info(userId);
User user = userService.getById(userId);
log.info(user.toString());
ActionContext.getContext().getValueStack().push(user); return super.editUI();
} @Override
public String add() { User model = this.getModel();
log.info(model.toString());
userService.save(model);
return super.add();
} @Override
public String addUI() {
return super.addUI();
} @Override
public void validate() {
log.info("開始校验");
super.validate();
} public int getUserId() {
return userId;
} public void setUserId(int userId) {
this.userId = userId;
} public int getPageNum() {
return pageNum;
} public void setPageNum(int pageNum) {
this.pageNum = pageNum;
} }

jsp 代码

  • list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>username列表</title>
<%@ include file="/WEB-INF/jsp/public/common.jspf" %>
</head>
<body> <s:debug></s:debug>
<div class="container"> <!-- 分页信息 -->
<s:form id="pageform" action="userAction_list">
<table class="table"> <!-- 表头-->
<thead>
<tr>
<td>username</td>
<td>密码</td>
<td>邮箱</td>
<td>联系方式</td>
<td>相关操作</td>
</tr>
</thead> <!--显示数据列表-->
<tbody>
<s:iterator value="recordList">
<tr>
<td>${username}</td>
<td>${password}</td>
<td>${email}</td>
<td>${telphone}</td>
<td>
<s:a action="userAction_delete?userId=%{id}" onclick="return confirm('您确定要删除么?')">删除</s:a>
<s:a action="userAction_editUI? userId=%{id}">改动</s:a>
</td>
</tr>
</s:iterator>
<%@ include file="/WEB-INF/jsp/public/pageView.jspf" %>
</tbody>
</table> </s:form>
<!-- 其它功能超链接 -->
<div>
<div>
<s:a action="userAction_addUI">加入</s:a>
</div>
</div>
</div>
</body>
</html>
  • saveUI.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>username列表</title>
<%@ include file="/WEB-INF/jsp/public/common.jspf" %>
</head>
<body> <s:debug></s:debug>
<div class="container"> <!-- 分页信息 -->
<s:form id="pageform" action="userAction_list">
<table class="table"> <!-- 表头-->
<thead>
<tr>
<td>username</td>
<td>密码</td>
<td>邮箱</td>
<td>联系方式</td>
<td>相关操作</td>
</tr>
</thead> <!--显示数据列表-->
<tbody>
<s:iterator value="recordList">
<tr>
<td>${username}</td>
<td>${password}</td>
<td>${email}</td>
<td>${telphone}</td>
<td>
<s:a action="userAction_delete?userId=%{id}" onclick="return confirm('您确定要删除么?')">删除</s:a>
<s:a action="userAction_editUI?userId=%{id}">改动</s:a>
</td>
</tr>
</s:iterator>
<%@ include file="/WEB-INF/jsp/public/pageView.jspf" %>
</tbody>
</table> </s:form>
<!-- 其它功能超链接 -->
<div>
<div>
<s:a action="userAction_addUI">加入</s:a>
</div>
</div>
</div>
</body>
</html>

为了方便,在这里我没有将js与jsp代码分离,最好的做法是jsp外部引用js文件,并将引用的文件放到html代码后</body>

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Maven 建 Struts2 基本实现 CURD Controller的更多相关文章

  1. Maven搭建struts2+spring+hibernate环境

    Maven搭建struts2+spring+hibernate环境(一) 本文简单的使用STS的自带的maven插件工具搭建ssh(struts2+spring+hibernate)开发环境,图文并茂 ...

  2. 如何使用maven建一个web3.0的项目

    使用eclipse手动建一个maven的web project可能会有版本不合适的情况,例如使用spring的websocket需要web3.0什么的,不全面的修改可能会出现各种红叉,甚是苦恼.我从我 ...

  3. 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境

    做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...

  4. 在eclipse中使用Maven建web工程项目

    在eclipse中使用Maven建web工程项目: 第一种方式: 右键新建maven工程,勾选创建一个简单工程 填入信息,注意打包方式要改为war 点击完成,创建完的工程目录如下: 项目中没有WEB- ...

  5. Maven构建Struts2项目

    1.添加Struts2依赖 这里主需要在pom.xml中添加一个struts-core的依赖即可: <project xmlns="http://maven.apache.org/PO ...

  6. 使用Maven搭建Struts2框架的开发环境

    一.创建基于Maven的Web项目

  7. 在eclipse中使用Maven建web工程的两种方式

    Eclipse版本:Neon Release (4.6.0) Maven版本:3.3.9 第一种方式: 右键新建maven工程,勾选创建一个简单工程 填入信息,注意打包方式要改为war 点击完成,创建 ...

  8. Maven搭建Struts2+Spring3+Hibernate4框架

    做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...

  9. IntelliJ IDEA中使用综合使用Maven和Struts2

    在Intellij IDEA中手动使用Maven创建Web项目并引入Struts2 创建一个新的Maven项目 建好项目之后点击左下角的enable auto import 项目部署 在Moudule ...

随机推荐

  1. httplib,urllib和urllib2

    一.httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现. import httplib con ...

  2. 基于visual Studio2013解决C语言竞赛题之1003字母打印

        题目 解决代码及点评 ///************************************************************************/ ...

  3. mysql中IN和EXITS效率

    mysql中的in语句是把外表和内表作hash 连接.而exists语句是对外表作loop循环,每次loop循环再对内表进行查询.一直大家都觉得exists比in语句的效率要高.这样的说法事实上是不准 ...

  4. Java基础04 封装与接口

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...

  5. 【笔记】《通俗详细地讲解什么是P和NP问题》的概念记录

    1问题规模: 要计算或解决一个问题,该问题通常有一个大小规模,用n表示. 2算法的时间复杂度 计算次数与n的关系函数.(因为计算次数隐含时间). 3多项式时间复杂度 所有形如a*n^k+b*n^(k- ...

  6. CentOS 6.4 + 曙光DS200 IPSan组建FTP服务器

    CentOS 6.4 + 曙光DS200 IPSan组建FTP服务器 http://write.blog.csdn.net/postedit/10911105#本系列文章由ex_net(张建波)编写, ...

  7. HTML+CSS+JS - 5秒钟之后跳转页面

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.c ...

  8. wince平台下使用log4net记录日志

    前面我写过一篇文章是来介绍windows平台下开发软件使用log4net来记录日志的,详情请参考:用一个简单的示例说明日志记录组件log4net的使用. 我们在wince平台下开发程序也一样需要日志文 ...

  9. dos批量替换当前目录后缀名

    有时候有些后缀名不满足条件,就需要进行批量的替换,如果人为的去替换,那么如果量少的话还好说,量多的话一个个去替换就太傻了,今天从网络上面查找了一些批量替换的dos命令,用起来还挺好用的,就直接把代码贴 ...

  10. 最长公共子序列python实现

    最长公共子序列是动态规划基本题目,以下依照动态规划基本步骤解出来. 1.找出最优解的性质,并刻划其结构特征 序列a共同拥有m个元素,序列b共同拥有n个元素,假设a[m-1]==b[n-1],那么a[: ...