【Struts】Struts框架配置详解
1.首先将所必须的Jar包放到项目的WebRoot/WEB-INF/lib目录下。
如果你没有这些Jar文件,你可以到Struts官网上下载:http://struts.apache.org/。因为经常会用到这些Jar包,因此我将Struts所需的Jar包进行了整理,你可以点击这里下载。
Struts所需Jar包下载:http://pan.baidu.com/s/1c0pdqTy
密码:jb2m
如果你想了解更多关于以上列出的Jar包的信息,你可以阅读我的另一篇文章:(MARK)
2.在web.xml中加入如下的Struts配置信息
1 <!-- Struts框架的配置 开始 --> 2 <filter> 3 <filter-name>struts2</filter-name> 4 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 5 </filter> 6 <filter-mapping> 7 <filter-name>struts2</filter-name> 8 <url-pattern>/*</url-pattern> 9 </filter-mapping> 10 <!-- Struts框架的配置 结束 -->
3.在src目录下创建struts.xml文件
1 <?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"> 2 <struts> 3 <package name="default" namespace="/" extends="struts-default"> 4 <action name="AS_sayHello" class="com.basestruts.action.AS_SayHelloAction" 5 method="execute"> 6 <result name="success">/result.jsp</result> 7 <result name="input">/index.jsp</result> 8 </action> 9 10 <action name="MD_sayHello" class="com.basestruts.action.MD_SayHelloAction" 11 method="execute"> 12 <result name="success">/result.jsp</result> 13 <result name="input">/index.jsp</result> 14 </action> 15 </package> 16 </struts>
主要属性说明:<package> --name:用于区别不同的package;必须是唯一的、可用的变量名;
<package> --namespace:空间名,不同功能的代码放在不同的空间里,使得配置文件层次更加清晰。空间名是调用action时输入路径的组成部分;
<package> --extends:继承其他的package,使得代码更加简洁。每个配置action的package都必须直接或间接继承struts-default这个系统默认的package
<action> --name:用于在一个package里区别不同的action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分;
<action> --class:action所在的路径(包名+类名);
<action> --method:action所调用的方法名;
调用action的路径为:namespace + action名。例如当我把struts.xml文件改成:
1 <?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"> 2 <struts> 3 <package name="default" namespace="/message" extends="struts-default"> 4 <action name="AS_sayHello" class="com.basestruts.action.AS_SayHelloAction" 5 method="execute"> 6 <result name="success">/result.jsp</result> 7 <result name="input">/index.jsp</result> 8 </action> 9 10 <action name="MD_sayHello" class="com.basestruts.action.MD_SayHelloAction" 11 method="execute"> 12 <result name="success">/result.jsp</result> 13 <result name="input">/index.jsp</result> 14 </action> 15 </package> 16 </struts>
这时,如果我要调用名字为:AS_sayHello的action,那么我必须输入:message/AS_sayHello 才能正确访问到这个Action。
注意,这里不要写成"/message/AS_sayHello",最前面不用加左斜杠。
在写result视图的时候,有这样两种写法:/WEB-INF/Hello.jsp和WEB-INF/Hello.jsp。这两种的区别你知道吗?/WEB-INF/Hello.jsp它会不计较你的namespace直接就去访问这个地方了。
但是如果是:WEB-INF/Hello.jsp,而你的命名空间又是/test.这样的话,它访问的就是:/test/WEB-INF/Hello.jsp,如果说不存在test,那么直接报错。由此可见,左斜杠的作用就是告诉Struts我要从根目录(WebRoot)开始算起。
4.编写Action处理类
编写的Action类最基本的应该继承ActionSupport类。如果要结合POJO使用,则应该实现ModelDriven接口。
但实际上你也不集成ActionSupport,但这样以来你的工作量便会直线上升,因为ActionSupport帮你做了很多通用的工作。(补充最基本的不继承任何类的Action例子)
所以一般情况下还是建议至少继承ActionSupport类。
下面用一个继承了ActionSupport的Action处理类作为例子:
1 package com.basestruts.action; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 /** 5 * 通过直接在Action中声明参数进行参数传递 6 * @author chenyr 7 * 8 */ 9 10 public class AS_SayHelloAction extends ActionSupport { 11 12 /** 名字 **/ 13 private String name; 14 15 /** 消息 **/ 16 private String message; 17 18 19 /** 传递到前台的消息(必须提供SET/GET方法) **/ 20 private String sayHelloStr = ""; 21 22 public String execute() 23 { 24 sayHelloStr = "读取不到前台消息!"; 25 26 if(name != null && message != null) 27 { 28 sayHelloStr = name + "," + message; 29 } 30 31 System.out.println(sayHelloStr); 32 33 return SUCCESS; 34 } 35 36 /* 省略name, message, sayHelloStr三个属性的SET/GET方法*/ 37 }
前台页面用表单传递name, message参数。
1 <%@page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ page contentType="text/html;charset=utf-8" %> 3 4 <!-- 省略了其他代码 --> 5 <body> 6 <%-- 通过Struts传递参数,数据传递方式必须选择post,否则编码错误! --%> 7 <form action="message/MD_sayHello" method="post" > 8 <b>名字:</b><input type="text" id="name" name="name" /></br> 9 <b>消息:</b><input type="text" id="message" name="message"/></br> 10 <input type="submit" name="submit" value="问好"/> 11 </form> 12 </body>
注意:Struts传递数据时,必须将表单的method属性设为post,否则会出现编码错误!
结果页面result.jsp:
<body> <h1>${sayHelloStr }</h1> </body>
这是最基本的通过在Action中直接声明要接收的参数,并且声明SET/GET方法。还有另外一种是通过ModelDriven实现参数的传递,这种方式下Struts将所有的参数封装到了一个POJO类,使得Action文件代码更加简洁。
如果你想了解更多,可以阅读我的另外一篇博文:Struts中前后台参数传递的两种方式
小结:配置Struts框架的三个步骤为:
第一,加入Jar包;
第二,配置web.xml文件;
第三,创建并配置struts.xml文件;
第四,编写Action处理类。
![扫描关注微信公众号](https://images.cnblogs.com/cnblogs_com/chanshuyi/1943043/o_220725133529_%E5%BE%AE%E4%BF%A1%E6%90%9C%E4%B8%80%E6%90%9C-%E6%A0%91%E5%93%A5%E8%81%8A%E7%BC%96%E7%A8%8B.png)