一:什么是struts2?

Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点

Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架下开发的程序提供很好的兼容性

二:struts2的项目结构

apps目录:Struts2示例应用程序

docs目录:Struts2指南、向导、API文档

lib目录:Struts 2的发行包及其依赖包

src目录:Struts 2项目源代码

步骤一:配置web.xml文件

  1. <filter>
  2. <filter-name>struts2</filter-name>
  3. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>struts2</filter-name>
  7. <!-- 拦截所有的action -->
  8. <url-pattern>/*</url-pattern>
  9. </filter-mapping>

步骤二:在src目录下创建struts2.xml配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5.  
  6. <struts>
  7. <!-- 配置文件中只要添加以下配置,那么以后修改配置文件不用重启tomcat -->
  8. <constant name="struts.devMode" value="true" />
  9.  
  10. <package name="default" namespace="/" extends="struts-default">
  11. <!-- 第一个action的例子 -->
  12. <action name="helloWorld" class="cn.happy.action.HelloWorldAction">
  13. <result name="success">
  14. index.jsp
  15. </result>
  16. </action>
  17. <!-- 登陆的action -->
  18. </package>
  19. <!-- Add packages here -->
  20. </struts>

步骤三:编写Action类

  1. package cn.happy.action;
  2.  
  3. import com.opensymphony.xwork2.Action;
  4.  
  5. public class HelloWorldAction implements Action{
  6. private String name ;
  7. private String message;
  8. public String execute() throws Exception {
  9. setMessage("Hello"+getName());
  10. return "success";
  11. }
  12. }

步骤四:创建index.jsp页面

  1. <div>
  2. <h1>
  3. <!--显示Struts Action中message的属性内容-->
  4. <s:property value="message"/>
  5. </h1>
  6. </div>
  7. <div>
  8. <form action="helloWorld.action" method="post">
  9. 请输入您的姓名:
  10. <input name="name" type="text" />
  11. <input type="submit" value="提交" />
  12. </form>
  13. </div>

步骤五:使用浏览器访问

运行结果

案例二:

实现登陆案例

步骤一:在src目录下创建struts2.xml配置文件,如下:

  1. <struts>
  2. <!-- 修改该文件,tomcat不用重启 -->
  3. <constant name="struts.devMode" value="true"/>
  4. <package name="default" namespace="/" extends="struts-default">
  5. <action name="HelloWorldAction" class="cn.action.HelloWorldAction">
  6. <result name="success">/success.jsp</result>
  7. <result name="login">/error.jsp</result>
  8. </action>
  9. </package>
  10. </struts>

步骤二:创建Action类

注意:在此需要校验从前台传递过来的用户名和密码,所以我们需要在Auction类中植入两个属性,但如果当属性过多时我们就可以将这些属性封装成为实体类,在Action类中引用它们。

1.1创建实体类UserInfo

  1. package entity;
  2. public class UserInfo {
  3. private String username;
  4. private String userpwd;
  5. public String getUsername() {
  6. return username;
  7. }
  8. public String getUserpwd() {
  9. return userpwd;
  10. }
  11. public void setUsername(String username) {
  12. this.username = username;
  13. }
  14. public void setUserpwd(String userpwd) {
  15. this.userpwd = userpwd;
  16. }
  17.  
  18. }

1.2

创建的Action类加多实现一个接口:ModelDriven<T>,并且重写该接口的抽象方法!

  1. package cn.action;
  2.  
  3. import java.util.Map;
  4.  
  5. import javax.servlet.http.HttpSession;
  6.  
  7. import org.apache.struts2.ServletActionContext;
  8.  
  9. import com.opensymphony.xwork2.Action;
  10. import com.opensymphony.xwork2.ActionContext;
  11. import com.opensymphony.xwork2.ModelDriven;
  12.  
  13. import entity.UserInfo;
  14.  
  15. public class HelloWorldAction implements Action,ModelDriven<UserInfo> {
  16. private UserInfo users=new UserInfo();
  17. @Override
  18. public String execute() throws Exception {
  19.  
  20. /*Map<String, Object> session = ActionContext.getContext().getSession();
  21. session.put("username", users.getUsername());*/
  22. HttpSession session = ServletActionContext.getRequest().getSession();
  23. session.setAttribute("username", users.getUsername());
  24. if(users.getUsername().equals("admin")&&users.getUserpwd().equals("admin"))
  25. {
  26. return "success";
  27. }
  28. else
  29. {
  30. return "login";
  31. }
  32. }
  33. @Override
  34. public UserInfo getModel() {
  35. // TODO Auto-generated method stub
  36. return users;
  37. }
  38. }

步骤三:获取session

方式:耦合

解藕

1.1耦合方式:

方式一:

HttpSession session2 = ServletActionContext.getRequest().getSession()

方式二:

1.2解耦方式

方式一:

Map<String, Object> session = ActionContext.getContext().getSession();

返回值是一个Map集合,我们回想下当初我们学习servlet时,如何向session的作用域中存放数据?

request.getSession().setAttribute(string,Object);

怎么样,眼熟吧!不解释

方式二:

使用struts2提供的SessionAware接口为我们自动装配出来一个Map集合,使用同上!

那么问题来了?这两种方式有什么不同吗?

解耦方式:

为了避免与Servlet API耦合在一起,方便Action类做单元测试,
  Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,
  构造了三个Map对象来替代这三种对象,在Action中,
  直接使用HttpServletRequest、HttpSession、ServletContext对应的Map对象来保存和读取数据。
  要获得这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类

耦合方式:

直接访问 Servlet API将使Action类与Servlet API耦合在一起,Servlet API对象均由Servlet容器来构造,与这些对象绑定在一起,测试过程中就必须有Servlet容器,这样不便于Action类的测试,但有时候,确实需要访问这些对象,Struts2同样提供了直接访问ServletAPI对象的方式。

要直接获取Servlet API对象可以使用org.apache.struts2.ServletActionContext类,该类是ActionContext类的子类。

步骤三:创建登陆界面

  1. <s:form name="form1" namespace="/" method="post" action="login">
  2. 请输入用户名: <s:textfield name="username"></s:textfield> <br/>
  3. <s:textfield name="password"></s:textfield><br/>
  4. <s:submit value="登陆"></s:submit>
  5. </s:form>

struts2初体验的更多相关文章

  1. Struts2 初体验

    Sturts是一款优雅的,可扩展性很强的框架.它是由Struts开发团队和WebWord团队合作,共同开发的一个新的产品.新版本的Struts2 更加容易使用,更加接近Struts所追求的理念.从开发 ...

  2. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  3. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  4. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  5. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  6. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  7. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  8. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  9. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

随机推荐

  1. HTML动画分类 HTML5动画 SVG库 SVG工具 Canvas动画工具

     1.js配合传统css属性控制,可以使用setTimeout或者高级的requestAnimationFrame 2.css3 3.svg 4.canvas(当然,这个还是要配合js)   也许这么 ...

  2. oracle中Window和Window Group

    参考文献: http://www.5ienet.com/note/html/scheduler/oracle-scheduler-using-window.shtml window概念 此Window ...

  3. iOS从info.plist获取项目的名称及版本号

    NSString *executableFile = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundl ...

  4. 使用cocoaPods一键集成第三方登录(新浪微博,qq,微信)

    第三方登录是现在app很常用的功能,而这个功能我已经写过两三次了...每次都写大同小异的代码真的是很痛苦,而且每次都要根据说明去添加那些依赖库,配置linkFlag什么的,完全是体力活,所以一直想把这 ...

  5. Android Studio简单设置

    IDE外观&行为 修改主题,修改全局字体 修改主题,想用炫酷的深色主题,就改成Darcula吧:字体的话,选一个带中文的,要不然会有很多口口,我这里用Microsoft YaHei UI,很不 ...

  6. iOS tableView 静态单元格的实现

    本文转自:http://home.cnblogs.com/u/wendingding/ iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一 ...

  7. IrfanView 4.36 中文版发布了

    IrfanView 4.36 简体中文便携版 小而快的图片浏览器 仅仅不到2M的小软件,功能却能与体积大到几十M的ACDSee相媲美!这个软件就是IrfanView.图片.音频.视频浏览,图片批量格式 ...

  8. 13、系统集成项目经理要阅读的书籍 - IT软件人员书籍系列文章

    系统集成项目经理主要对弱电等项目负责.一般包括计算机网络系统,计算机设备系统,智能楼宇,机房建设等.在软考中,系统集成项目经理放在了中级,这个只能说明系统集成项目经理需要的经验没有高级信息系统项目管理 ...

  9. Java类型擦除机制

    Java泛型是JDK 5引入的一个特性,它允许我们定义类和接口的时候使用参数类型,泛型在集合框架中被广泛使用.类型擦除是泛型中最让人困惑的部分,本篇文章将阐明什么是类型擦除,以及如何使用它. 一个常见 ...

  10. Android简化xml sax解析

    dom解析占用内存大(我这边需要解析各种各样的kml文件,有时4-5M的kml文件使用dom解析很多手机就内存溢出了),也需要引入第三方库,所以使用相对于节省内存很多.不需引入其他库的sax解析就是很 ...