Struts2入门

搭建Struts2的开发环境

  1. 找到所需的jar包:发行包的lib目录中(不同版本需要的最小jar包是不同的,参见不同版本的文档。本文使用的是2.1.7)

    struts2-core.jar  核心jar包xwork-2.jar  xwork核心jar包ognl.jar  ognl表达式freemarker.jar  FreeMarker模板commons-logging.jar  日志commons-fileupload.jar  文件上传,2.1.6之后必须加入此包commons-io.jar  文件上传依赖的包  
    
  2. 建立一个名称为struts.xml的配置文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts></struts>
  1. 配置核心控制器,就是一个过滤器
        <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>

如果TOmcat启动成功,没有报错,证明环境搭建成功!

开发第一个Struts2案例

1、编写struts.xml配置文件

        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts><!--这是Struts2配置文件的根元素--><package name="itcast" namespace="/test" extends="struts-default"><!--pageckage:方便管理动作元素name:必须有。包的名称,配置文件中必须保证唯一。namespace:该包的名称空间,一般是以"/"开头extends:集成的父包的名称。struts-default名称的包是struts2框架已经命名好的一个包。(在struts2-core.jar中有一个struts-default.xml中)abstract:是否是抽象包。没有任何action元素的包就是抽象包(java类)--><action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="sayHello"><!--action:代表一个请求动作name:同包中必须唯一。动作的名称class:负责处理的JavaBean的类全名method:JavaBean中的对应处理方法。(动作方法:特点是,public String 方法名(){})--><result name="success">/1.jsp</result><!--result:结果类型name:动作方法返回的字符串主体内容:View的具体地址。--></action></package></struts>

2、根据配置文件,创建需要的javabean和对应的动作方法, 在动作方法中完成你的逻辑调用。

    package cn.itcast.action;public class HelloWorldAction implements Serializable {private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String sayHello(){message = "helloworld by struts2";return "success";}}

3、编写View,显示结果

     ${message}

4、访问helloworld动作的方式:
http://localhost:8080/struts2day01/test/helloworld 应用名称/包的名称空间/动作的名称

默认情况下:访问动作名helloworld,可以直接helloworld,或者helloworld.action

搜索顺序

http://localhost:8080/struts2day01/test/a/b/c/helloworld/test/a/b/c:名称空间helloworld:动作名称搜索顺序:名称空间/test/a/b/c  没有helloworld/test/a/b    没有helloworld/test/a      没有helloworld/test        有了,调用执行

Struts2配置文件的详解

1、struts.xml配置文件编写是没有提示的问题?
方法一:上网即可
方法二:
1、拷贝http://struts.apache.org/dtds/struts-2.1.7.dtd地址
2、Eclipse的window、preferences,搜索XML Catelog
3、点击add按钮
Location:dtd文件的路径
Key Type:URI
Key:http://struts.apache.org/dtds/struts-2.1.7.dtd

2、Struts配置文件中的各种默认值。

action:
class:默认值是com.opensymphony.xwork2.ActionSupport
常量: SUCCESS success
NONE none
ERROR error
INPUT input
LOGIN login
method:默认值是public String execute(){}

实际开发中:自己编写的动作类一般情况下继承com.opensymphony.xwork2.ActionSupport  

result:
type:转到目的地的方式。默认值是转发,名称是dispatcher
(注:type的取值是定义好的,不是瞎写的。在struts-default.xml中的package中有定义)

        <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/><result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/><result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/><result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/><result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/><result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/><result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/><result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/><result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/><result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
  1. dispatcher:普通的转发到某个页面
  2. chain:普通的抓发到某个动作名称
  3. redirect:重定向到一个页面
  4. redirectAction:重定向到一个动作名称
  5. plainText:以纯文本的形式输出JSP内容

result元素的写法:

方式一:

            <result type="chain" name="success">a2</result>

方式二:

            <result type="chain" name="success"><param name="actionName">a2</param><!--name对应的chain的处理器中的setActionName()方法--></result>

注意:如果要转向的是在另外一个名称空间的动作,那么只能使用方式二

            <package name="p1" namespace="/namespace1" extends="struts-default"><action name="a2"><result type="dispatcher" name="success">/3.jsp</result></action></package><package name="p2" namespace="/namespace2" extends="struts-default"><action name="a1"><result type="chain" name="success"><param name="namespace">/namespace1</param><param name="actionName">a2</param></result></action></package>

各种result使用示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts><constant name="struts.devMode" value="true"></constant><constant name="struts.action.extension" value="action,,do"></constant><package name="itcast" namespace="/test" extends="struts-default"><action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="sayHello"><result name="success">/1.jsp</result></action><action name="visit2jsp"><result type="redirect" name="success">/2.jsp</result></action></package><package name="p1" namespace="/namespace1" extends="struts-default"><!--  <action name="a1"><result type="chain" name="success">a2</result></action>--><action name="a2"><result type="dispatcher" name="success">/3.jsp</result></action></package><package name="p2" namespace="/namespace2" extends="struts-default"><action name="a1"><result type="chain" name="success"><param name="namespace">/namespace1</param><param name="actionName">a2</param></result></action></package><package name="p3" namespace="/ns3" extends="struts-default"><action name="a3"><result type="redirectAction" name="success"><param name="namespace">/ns4</param><param name="actionName">a4</param></result></action></package><package name="p4" namespace="/ns4" extends="struts-default"><action name="a4"><result type="dispatcher" name="success">/4.jsp</result></action></package><package name="p5" namespace="/ns5" extends="struts-default"><action name="a5"><result type="plainText" name="success">/5.jsp</result></action></package><!-- 动态的给Action类的属性赋值 --><package name="p6" namespace="/ns6" extends="struts-default"><action name="a6" class="cn.itcast.action.HelloWorldAction"><param name="message">you are big shit!</param><result name="success">/6.jsp</result></action></package><!-- 获取Action的值 --><package name="p7" namespace="/ns7" extends="struts-default"><action name="a7" class="cn.itcast.action.HelloWorldAction" method="sayHello"><result type="redirect" name="success">/7.jsp?msg=${message}</result></action></package></struts>

其中第6个动态的给Action的属性赋值与第7个获得action的值比较值得注意

6.jsp

<body>6666:${message}</body>

7.jsp

<body>7777:${param.msg}</body>

开发中配置文件的更改,在访问时让框架自动重新加载:

struts.devMode = false(default.properties)
利用strutx.xml中的constant元素来覆盖掉default.properties默认行为

<struts><constant name="struts.devMode" value="true"></constant>
</struts>

控制action的后缀名

<constant name="struts.action.extension" value="action,,do"></constant>

完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apifox vs Eolink,国内 Api 工具哪家强?

目前行业内有 postman、jmeter 为代表开源 Api 工具派系&#xff0c;我想对大家对这两个词并不陌生。虽然它们能解决基本的接口测试&#xff0c;但是无法解决接口链路上的所有问题&#xff0c;一个工具难以支持整个过程。 在国内&#xff0c;我们可以看到有国产 API 管理工具&…

人工智能、区块链、混合现实:2019年新闻、媒体与技术趋势

来源&#xff1a;资本实验室近日&#xff0c;未来今日研究所&#xff08;Future Today Institute&#xff09;发布了《2019年新闻、媒体与技术趋势报告》&#xff0c;报告提出了涵盖多个领域的108个新兴技术趋势。报告显示&#xff0c;未来的新闻、媒体等行业将受到各种技术错综…

活久见:都 2203 年了,你还在使用 word 调试 API

随着信息技术的发展&#xff0c;API 变得无处不在&#xff0c;无处不用。但令人费解的是&#xff0c;都 2203 年了&#xff0c;竟然还有很多人使用 word 调试 API&#xff1f; 今天&#xff0c;西红柿将带领大家打开新世界的大门&#xff0c;放下诺基亚&#xff0c;抄起智能机&…

php 之fsockopen(转)

1.函数作用 打开网络的socket连接 2.使用参数 int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]); 3.简介 目前这个函数提供二个 Socket 资料流界面&#xff0c;分别为 Internet 用的 AF_INET 及 Unix 用的 AF_UNIX。当在 Internet 情形…

Struts2基础知识

本文主要包括以下内容 struts2常用常量的定义与意义struts2处理流程拆分struts动态方法调用,使用通配符接收请求参数中文编码问题自定义类型转化器访问或添加request/session/application常用servlet对象的获取 struts2常用常量的定义与意义 struts2处理流程 每一次请求都会创…

自动驾驶汽车测试在美惹争议,原因为何?

来源&#xff1a;中国汽车报摘要&#xff1a;近日&#xff0c;针对美国总统特朗普提出的&#xff0c;汽车制造商需自愿提交他们在公共道路上测试自动驾驶汽车安全报告一事&#xff0c;回应者寥寥&#xff0c;目前只有三家汽车公司响应了上述要求&#xff0c;提交了相关材料。据…

Struts2基础知识(二)

本文主要包括以下内容 文件上传&#xff0c;多文件上传 自定义拦截器 用户输入验证国际化 文件上传 将头设置为enctype”multipart/form-data” <body><form action"${pageContext.request.contextPath}/upload/upload1.action" method"post" …

SQL Performance Analyzer SPA常用脚本汇总

SPA常用脚本汇总 附件为 一个SPA报告 spa_buffergets_summary SQL 性能分析器 SQL Performance Analyzer SPA Oracle Database 11g 引入了 SQL 性能分析器&#xff1b;使用该工具可以准确地评估更改对组成工作量的 SQL 语句的影响。SQL 性能分析器可帮助预测潜在的更改对 SQL 查…

想做自动驾驶技术的入,这回分享一个简单好用的开放平台

前言 自动驾驶已经是现在技术开发领域最热门的方向之一&#xff0c;作为程序员&#xff0c;很多人也都想来这个领域试试水。但是这个领域的门槛也挺高&#xff0c;不过想开始的话&#xff0c;其实可以从一些专门针对自动驾驶的开放平台开始入手&#xff0c;目前比较主流的可以…

潘建伟团队再登Nature:全球首次实现器件无关量子随机数,量子保密通信安全再升级...

岳排槐 编辑量子位 出品 | 公众号 QbitAI据消息&#xff0c;潘建伟团队日前成功实现了器件无关的量子随机数&#xff0c;将在数值模拟、密码学等领域广泛应用&#xff0c;并有望形成新的随机数国际标准。相关研究成果于北京时间20日由国际权威学术期刊《自然》在线发表&#xf…

一篇文章搞懂数据仓库:数据治理(目的、方法、流程)

目录 1、什么是数据治理 2、数据治理的目的 3、数据治理的方法 4、数据质量8个衡量标准 5、数据治理流程 1、什么是数据治理 数据治理&#xff08;Data Governance&#xff09;是组织中涉及数据使用的一整套管理行为。由企业数据治理部门发起并推行&#xff0c;关于如何制…

在OEL5上安装配置Oracle Gird Control 10.2.0.5

早期的Grid Control问题实在太多了&#xff0c;以至于把10.2.0.1的Grid Control升级到10.2.0.5几乎是不可能完成的任务&#xff1b;此外10.2.0.5以前的gc不支持11g作为repository database仓库数据库&#xff0c;不仅于此10.2.0.1版本是不支持rhel5或OEL5的&#xff0c;如果想安…

Struts2基础知识(三)

本文主要包括以下内容 OGNL表达式标签 防止表单重复提交 使用第三方插件tomcat启动时struts2容器做的事 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写&#xff0c;它是一个开源项目。Struts2框架使用OGNL作为默认的表达式语言。 相对EL表达…

70行Python代码,获取中国数据库大会(DTCC)全部PPT

大家好&#xff0c;我是明月十四桥&#xff01; 擅长领域&#xff1a;python黑科技、大数据后端研发、数据仓库 今日重点&#xff1a; ① 学会使用python 获取各种网站的ppt&#xff0c;可见即可爬&#xff1b; ② 中国数据库大会一年一届&#xff0c;门票昂贵&#xff0c;干货…

半导体产业格局:行稳而致远,强者将恒强

来源&#xff1a;华泰证券▌中国半导体产业链渐趋完善&#xff0c;产业生态体系逐步成形目前我国垂直分工模式的芯片产业链初步搭建成形&#xff0c;产业上中下游已然打通&#xff0c;涌现出一批实力较强的代表性本土企业。集成电路是基础性、先导性产业&#xff0c;涉及国家信…

Struts2之Crud综合实例

本文是Struts2的综合实例&#xff0c;主要包含以下功能 添加&#xff0c;删除&#xff0c;修改&#xff0c;查询用户上传&#xff0c;下载图片 拦截器实现登陆功能 验证器检查输入 下载图片功能以前没有实现过&#xff0c;步骤如下 在类中增加两个属性 //文件下载private…

教你用python爬英雄联盟官网:①掌握爬虫技术;②Python数据可视化

大家好&#xff0c;我是明月十四桥&#xff01;&#xff01; 擅长领域&#xff1a;python黑科技、大数据后端研发、数据仓库 今日重点&#xff1a; ① 掌握爬虫技术&#xff0c;体会python爬虫流程&#xff0c;可见即可爬&#xff1b; ② 学会使用python数据可视化。 有问题的…

熟悉 ASP.NET MVC 类

System.Web.Mvc 命名空间 System.Web.Mvc 命名空间包含一些类和接口&#xff0c;它们支持用于创建 Web 应用程序的 ASP.NET 模型视图控制器 (MVC) 框架。该命名空间包含表示控制器、控制器工厂、操作结果、视图、分部视图以及模型联编程序等的类。 System.Web.Mvc.Ajax 命名空间…

7套干货,Python常用技术学习知识图谱!!(史上最全,建议收藏)

大家好&#xff0c;我是明月十四桥&#xff01; 你要偷偷努力&#xff0c;然后惊艳所有人~ 给大家推荐 7 个宝藏级教程&#xff0c;视频课是永久有效的&#xff0c;可以随时学习&#xff0c;有几门课程还有CSDN官方学习答疑群&#xff0c;课程右边扫码入群&#xff0c;讲师在群…

权威发布 |《科学美国人》:2018全球十大新兴技术

来源&#xff1a;世界经济论坛摘要&#xff1a;尽管这些技术仍处于发展早期&#xff0c;但它们吸引了众多研究团队的关注&#xff0c;并且广受投资者青睐。在未来3~5年间&#xff0c;它们可能会对社会与经济产生重要影响。9月19日&#xff0c;《科学美国人》与世界经济论坛&…