一、开发Struts2应用的主要工作

  1.Model层开发

  2.在web.xml中配置FilterDispatcher

  3.开发Action类

  4.拦截器(Interceptor)的配置或自定义开发

  5.开发视图

二、实例说明

简单步骤:

  •   下载并导入所需jar包;
  •   开发Model层业务逻辑;
  •   开发视图文件;
  •   开发Action类;
  •   在struts.xml中配置Action类;
  •   在jsp中对应Action;
  •   在web.xml中配置FilterDispatcher;

1.到官网下载并导入Struts2框架的主要核心jar包

struts2必须导入的常用的五个jar包:

    * xwork-2.0.4.jar ;
    * struts2-core-2.0.11.1.jar ;
    * freemarker-2.3.8.jar;
    * ognl-2.6.11.jar;
    * commons-logging-api-1.1.jar;

这几个文件是使用struts2时必须导入的,这是我使用时的版本,可能现在版本有所更新。

2.开发Model层业务逻辑

public class LoginService {  public boolean login(String cutname,String pwd){  if(cutname.equals("zhangsan")&&pwd.equals("123")){  return true;  }else{  return false;  }  }
} 

3.开发视图文件

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  <html>  <head>      <title>index starting page</title>  </head>  <body>       <!-- action 还没有指定 --><s:form action=" ">  <s:textfield name="custname" label="用户名"></s:textfield><br>  <s:password name="pwd" label="密 码"></s:password><br>  <s:submit value="Login"></s:submit>  </s:form>  </body>  </html>  

欢迎页面将显示登录用户的用户名,使用EL显示请求参数的值。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  <head>  <title>welcome page</title>  </head>  <body>  Welcome,${param.custname }  </body>
</html> 

4.开发Action类,调用业务逻辑,返回结果视图

package com.struts.action;
import com.struts.service.LoginService;  public class LoginAction {  private String custname;  private String pwd;  public String getCustname() {  return custname;  }  public void setCustname(String custname) {  this.custname = custname;  }  public String getPwd() {  return pwd;  }  public void setPwd(String pwd) {  this.pwd = pwd;  }  public String execute(){  LoginService ls = new LoginService();  boolean flag = ls.login(custname, pwd);  if(flag){  return "success";  }else{  return "fail";  }  }
} 

5.在struts.xml中配置Action类

struts2的主配置文件使用struts.xml,它必须放在classes目录下,在MyEclipse中的就是src下。配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"   "http://struts.apache.org/dtds/struts-2.1.dtd">  <struts>
<package name="user"   extends="struts-default">  <action name="Login" class="com.struts.action.LoginAction" >  <result name="success" >/welcome.jsp</result>  <result name="fail">/login.jsp</result>  </action>
</package>
</struts>  

6.在jsp中对应Action

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  <html>  <head>      <title>index starting page</title>  </head>  <body>  <!-- action 指向LoginAction --><s:form action="Login">  <s:textfield name="custname" label="用户名"></s:textfield><br>  <s:password name="pwd" label="密 码"></s:password><br>  <s:submit value="Login"></s:submit>  </s:form>  </body>  </html> 

7.在web.xml中配置FilterDispatcher

struts2通过过滤器来替代struts1.x中的actionServlet配置。在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">  <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>  </web-app>  

三、Demo大致运行过程如下:

  1.访问:http:localhost:8080/struts2/index.jsp;

容器执行index.jsp后,输出到客户端的仍然是解析后的HTML代码,其中表单的action值被解析为:action="/struts2/Login.action"。

  2.用户输入用户名和密码,点击登陆按钮后,则向服务器发送请求,请求URL根据表单的action生成:http://localhost:8080/struts/Login.action;

  3.web.xml中对/*的URL都配置了过滤器FilterDispatcher,所以该请求将被FilterDispatcher过滤;

  4.FilterDispatcher调用ActionMapper,ActionMapper判断URL的资源后缀。

Login.action的后缀是.action,因此ActionMapper认为需要调用Struts2框架的Action类;

  5.FilterDispatcher将请求处理交给ActionProxy,ActionProxy认为需要调用的Action的名字是URL中去掉.action后缀的字符串,即Login;

  6.ActionProxy通过Configuration查找struts.xml,找到name=Login的Action配置;

  7.ActionProxy实例化ActionInvocation;

  8.ActionInvocation实例调用与Action有关的拦截器,以及Action类的execute方法。

  9.Action执行结束后,根据struts.xml中配置的action的result,将导航到指定的URL。

  

转载于:https://www.cnblogs.com/slliang/archive/2012/08/25/2655832.html

Struts2_01_开发过程与实例说明相关推荐

  1. 物联网平台企业版:设备接入实例节点开发实战——实践类

    IoT物联网平台-实例化开发实战 前言 物联网平台企业版支持用户创建实例,用于设备接入和业务管理.企业版有一下优势: 根据业务规模,购买匹配的实例规格,可大幅节约您的成本. 实例规格按需选择,避免触达 ...

  2. 前端开发基础知识汇总

    一.HTML 1.前言与常用标签 浏览器 内核 备注 IE Trident IE.猎豹安全.360极速浏览器.百度浏览器 firefox Gecko 可惜这几年已经没落了,打开速度慢.升级频繁.猪一样 ...

  3. JAVA内部培训资料

    JAVA内部培训资料 一.JAVA基础培训系列 1.孙鑫JAVA高级软件工程师班培训录像(2DVD)   简介:光盘由孙鑫老师亲自授课录制.循序渐进.通俗易懂.实战性强.内容全面.讲解深刻.问答形式是 ...

  4. php递归分组,PHP递归实现无限级分类

    本篇文章的内容是PHP递归实现无限级分类,现在分享给大家,有需要的朋友也可以参考一下,大家一起过来看看吧$datasection = array( array('id' => 1, 'name' ...

  5. Spring Cloud微服务系统架构的一些简单介绍和使用

    Spring Cloud 目录 特征 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变Bootstrap的位置Properties ...

  6. 撸表情开发过程中使用腾讯云存储的接入实例分享

    推荐一下一个有趣的表情包收集网站,也可以在线制作表情包,欢迎访问:撸表情 撸表情(http://www.lubiaoqing.com)这个网站是业余时间开发的一个网站,涉及到大量表情包的检索和存储,个 ...

  7. 【转】Android实例剖析笔记(二)--用实例讲解Andriod的开发过程,以NotesList为实例介绍Android的菜单机制...

    原文网址:http://kb.cnblogs.com/page/78304/ 简介 android提供了三种菜单类型,分别为options menu,context menu,sub menu. op ...

  8. ZendFramework的介绍、安装和实例运行

    框架主要是为了提高开发效率.使得团队开发人员之间的更容易沟通和协作以及提高应用程序的可维护性.学习了解一种或多种框架对实际项目的应用会有所帮助. 一.ZendFramework 的介绍: ZendFr ...

  9. C++利用二级指针做函数形参来进行修改实参的实例分析

    在学C/C++的时候,我们都会了解到一级指针,int* i = NULL;   和二级指针int ** pp = NULL; 但是具体的一些应用我们可能很难理解,如果我们要取int*的地址,我们就需要 ...

  10. android用户界面之WebView教程实例汇总

    一.WebView教程 1.Android---UI篇---WebView(网络视图) http://www.apkbus.com/android-14259-1-1.html 2.webview学习 ...

最新文章

  1. LVS_DR实现(负载均衡)及LVS_DR+keepalived实现(高可用+负载均衡)
  2. 远程实习 | 达特茅斯学院招收网络嵌入和图挖掘方向研究型实习生
  3. mysql事务在提交后才发送给数据库执行_从一个线上问题分析binlog与内部XA事务提交过程...
  4. Java程序员从笨鸟到菜鸟之(八十八)跟我学jquery(四)JQuery框架操作元素的属性与样式
  5. mos管工作原理_筋膜枪原理与筋膜枪方案,和筋膜枪烧mos管原理。推荐使用mos管 AP15G04NF...
  6. 数据库面试题【十二、存储引擎选择】
  7. 11.1 JavaScript介绍
  8. @CachePut(与@Cacheable的差异)@CacheEvict
  9. QT VS环境安装后出现生成的程序can not start, can not find Qt pligins “windos“ 问题 2021-06-13
  10. CF183C:Diverse Permutation(构造)
  11. .两个windowsform之间的值传递
  12. html移动端即时翻译插件,React框架实现移动页面翻译是一种什么体验?
  13. guid主键 oracle_关于ORACLE的GUID主键生成
  14. 工程制图与计算机绘图教学视频,工程制图与计算机绘图(西电版)第1章_制图的基本知识教材教学课件.ppt...
  15. 特斯拉员工手册与马斯克的工作建议
  16. 欺骗的艺术——第二部分(6)
  17. Java NIO 通道(二)通道分散/聚集
  18. Oracle-数据库所有查询命令
  19. IP,ARP,以太网--网络层与数据链路层详解
  20. linux——SMB文件共享及应用实例

热门文章

  1. 凸优化第四章凸优化问题 4.5几何规划
  2. 感悟:number 2
  3. 目标追踪论文之狼吞虎咽(2):在线被动攻击学习
  4. EM 算法的推导和解释
  5. 如果一非零的整系数多项式能够分解成两个次数较低的有理系数多项式的乘积,那么它一定能分解成两个次数较低的整系数多项式的乘积
  6. 刷题记录 CF每日一题打卡 2020.5月?-六月16
  7. 用php远程获取MySQL到本地,mysql本地从远程数据库导数据_MySQL
  8. linux网卡配置规范
  9. python:生成器
  10. tomcat配置方法