【Struts】Struts框架配置详解
1.⾸先将所必须的Jar包放到项⽬的WebRoot/WEB-INF/lib⽬录下。
如果你没有这些Jar⽂件,你可以到Struts官⽹上下载:/。因为经常会⽤到这些Jar包,因此我将Struts所需的Jar包进⾏了整理,你可以点击这⾥下载。
Struts所需Jar包下载:
密码:jb2m
如果你想了解更多关于以上列出的Jar包的信息,你可以阅读我的另⼀篇⽂章:(MARK)
2.在l中加⼊如下的Struts配置信息
1<!-- Struts框架的配置开始 -->
2<filter>
3<filter-name>struts2</filter-name>
4<filter-class>org.apache.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⽬录下创建l⽂件
1<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "/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名。例如当我把l⽂件改成:
1<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Founda
tion//DTD Struts Configuration 2.0//EN"    "/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>
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处理类作为例⼦:
1package com.basestruts.action;
2
3import com.opensymphony.xwork2.ActionSupport;
4/**
5 * 通过直接在Action中声明参数进⾏参数传递
6 * @author chenyr
7 *
8*/
9
10public class AS_SayHelloAction extends ActionSupport {
11
12/** 名字 **/
13private String name;
14
15/** 消息 **/
16private String message;
17
18
19/** 传递到前台的消息(必须提供SET/GET⽅法) **/
20private String sayHelloStr = "";
21
22public String execute()
23    {
24        sayHelloStr = "读取不到前台消息!";
25
26if(name != null && message != null)
27        {
28            sayHelloStr = name + "," + message;
29        }
30
31        System.out.println(sayHelloStr);
32
33return 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框架的三个步骤为:
第⼀,加⼊Jar包;
第⼆,配置l⽂件;
第三,创建并配置l⽂件;
第四,编写Action处理类。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。