一、Struts2的获取

  Struts的官方网站为:http://struts.apache.org/

  下载完Struts2的jar包,解压,Struts2资源包的目录结构如下图:

Struts的使用

  • apps目录下包含了官方提供的Struts2应用示例.各示例均为war文件.
  • docs 目录下是官方提供的Struts2文档,可以通过index.html页面进行访问
  • lib 目录下是Struts2的发行包以及依赖包
  • src目录下是Struts的源代码

二、Struts2的使用

(1)导包:新建java Web项目,添加struts2的jar 文件。Struts2的依赖的基础jar如下

Struts的使用

(2)web.xml中配置Struts2的核心过滤器

<?xml version='1.0' encoding='UTF-8'?><web-app version='3.0'    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_3_0.xsd'>  <display-name></display-name>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <!-- Struts2的核心过滤器:注意,要放在所有过滤器的最后 -->  <filter>      <filter-name>struts</filter-name>      <!-- 早期的Struts的核心过滤器是:org.apache.struts2.dispatcher.FilterDispatcher          而在2.1.3之后使用下面的过滤器类       -->      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <filter-mapping>      <filter-name>struts</filter-name>      <url-pattern>.action</url-pattern>  </filter-mapping></web-app>

(3)编写一个测试的实体类。如下:

package entity;public class Student {    private String stuNo;    private String stuName;    public String getStuNo() {        return stuNo;    }    public void setStuNo(String stuNo) {        this.stuNo = stuNo;    }    public String getStuName() {        return stuName;    }    public void setStuName(String stuName) {        this.stuName = stuName;    }} 

(4)新建一个类继承ActionSupport,类里面定义私有地属性(非方法内),可以是任意类型的数据或对象,给这些属性添加set方法用于传递值到界面,添加get方法用于取界面的数据。例子如下:

package controNer;import com.opensymphony.xwork2.ActionSupport;import entity.Student;public class StudentControNer extends ActionSupport{    private Student stu = new Student();    public String show(){        stu.setStuName('张三');        stu.setStuNo('1001');        return 'showStudent';    }    public String changeStudent(){        System.out.println(stu.getStuNo());        System.out.println(stu.getStuName());        String stuName=stu.getStuNo();        stu.setStuNo(stu.getStuName());        stu.setStuName(stuName);        return 'changeStudent';    }    public Student getStu() {        return stu;    }    public void setStu(Student stu) {        this.stu = stu;    }}

(5)在src目录下新建一个Struts的xml文件,如下

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE struts PUBLIC    '-//Apache Software Foundation//DTD Struts Configuration 2.3//EN'    'http://struts.apache.org/dtds/struts-2.3.dtd'><struts>    <package name='default' namespace='/' extends='struts-default'>        <action name='queryStudent' class='controNer.StudentControNer' method='show'>            <result name='showStudent'>index.jsp</result>        </action>        <action name='changeStudent' class='controNer.StudentControNer' method='changeStudent'>            <result name='changeStudent'>index.jsp</result>        </action>    </package></struts>

在Struts配置文件中,包含以下几个元素:

  • package元素用于定义Struts2处理请求的逻辑单元,name属性为必需的并且唯一,指定包的名称(被其他包引用),extends属性类似Java的extends关键字,用于指定要扩展的包
  • action元素用于配置Struts2框架的”工作单元”action类,action元素将一个请求的URL(action的名字)对应到一个Action类.name必需的,用来表示action的名字;class属性可选,用于设定Action类的全限定名.
  • result元素用于设定Action类处理结果后系统下一步将要做什么.name属性表示result的逻辑视图名称,必须与Action类返回的字符串进行匹配;而result元素的值表示与逻辑视图名对应的物理资源之间的映射,用来指定这个结果对应的实际资源的位置.

(6)添加一个jsp页面,用来测试

<%@ page language='java' contentType='text/html; charset=utf-8'    pageEncoding='utf-8'%><!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'><html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'><title>Insert title here</title></head><body>    <form action='changeStudent.action'>        <input type='text' value='${stu.stuNo}' name='stu.stuNo'>        <input type='text' value='${stu.stuName}' name='stu.stuName'>        <input type='submit'>    </form></body></html>

(7)程序运行的流程说明:

  首先,浏览器访问struts中action的name.action,在web.xml执行过滤器,当检测到地址栏带有.action的情况时,会调用Struts留给我们的过滤器处理方法,进入到struts的配置文件中,然后检查.action前面的字段,当字段名和某个action的name值相同时,通过action的class和method查找到继承了ActionSupport的class的类,找到里面的method的方法,进行处理,通过这个类的私有属性的get方法,就可以找到界面提交过来的同一名字同一类型的对象的值,通过set方法就可以将数据返回界面。

详情请看:http://www.cnblogs.com/365txrw/p/StrutsCofigInfo.html

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。