• Struts的使用


    一、Struts2的获取

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

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

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

    二、Struts2的使用

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

    (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

  • 相关阅读:
    Android APP 内部捐赠实现(支付宝&微信)
    RecyclerView 与 Scrollview 搭配使用的两个坑
    Android 应用内直接跳转酷市场
    Zxing 的集成 ---- Maven 对应 Gradle 的写法
    Android Gradle manifestPlaceholders 占位符详解
    Nopcommerce架构浅谈之架构层次
    Nopcommerce架构浅谈之文件结构
    策略模式
    Class path contains multiple SLF4J bindings.
    常量池
  • 原文地址:https://www.cnblogs.com/365txrw/p/UseStruts.html
Copyright © 2020-2023  润新知