zoukankan      html  css  js  c++  java
  • Struts2

    结构:

    HelloWorldAction.java

    package com.struts2.test;
    
    public class HelloWorldAction {
           private String name;
    
           public String execute() throws Exception {
              return "success";
           }
           
           public String getName() {
              return name;
           }
    
           public void setName(String name) {
              this.name = name;
           }
        }
    web.xml提供任何Web应用程序的入口点:
    <display-name>Struts 2</display-name>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>//不写,默认为index.jsp
    </welcome-file-list>
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 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_2_5.xsd">
        <display-name></display-name>
    
        <!-- Struts2配置 -->
        <filter>
            <filter-name>struts2</filter-name>
            <!-- Filter的实现类 和struts2.5以前的可能有所不同 -->
            <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    </web-app>  

    index.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ taglib prefix="s" uri="/struts-tags"%>
    <!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>Hello World</title>
    </head>
    <body>
         <h1>Hello World From Struts2</h1>
       <form action="hello">
          <label for="name">Please enter your name</label><br/>
          <input type="text" name="name"/>
          <input type="submit" value="Say Hello"/>
       </form>
    </body>
    </html>     

    helloWorld.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
       <%@ taglib prefix="s" uri="/struts-tags"%>
       <!--  taglib指令告诉Servlet容器中,这个页面将使用Struts2标签,这些标签之前,
        将通过s:property标签中显示的动作类的属性名称>HelloWorldAction类的getName()方法返回的值。 -->
    <!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>Hello World</title>
    </head>
    <body>
        Hello World, <s:property value="name"/>
    </body>
    </html>

    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="struts2" namespace="/" extends="struts-default">
            <!-- <action name="index">
                <result >/index.jsp</result>
             </action> -->
            //如果不带参数的方法不指定,则默认行为是使用execute()方法
            <action name="hello" class="com.struts2.test.HelloWorldAction">
                <result>/helloWorld.jsp</result>
            </action>
         <-- more actions can be listed here -->
        </package>
    
        <-- more packages can be listed here -->
    </struts>
    struts.xml可以包含多个struts.xml
    <?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">
    <struts>
         <include file="struts1.xml"/>
         <include file="struts2.xml"/>
         <include file="struts3.xml"/>
    </struts>

    logging.properties:

    org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
    org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler

    浏览器访问http://localhost:8080/Struts2/

    点击say hello 跳转:

    -------------------------------完毕---------------------------------------

    结构:

    accessDenied.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>Access Denied</title>
    </head>
    <body>
        <h1>您没有权限查看此页</h1>
    </body>
    </html>

    HelloWorldAction.java也可以extends ActionSupport

    package com.struts2.test;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class HelloWorldAction extends ActionSupport {
           /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private String name;
    
           public String execute() throws Exception {
               if ("成功".equals(name))
                  {
                     return SUCCESS;
                  }else{
                     return ERROR;  
                  }
           }
           
           public String getName() {
              return name;
           }
    
           public void setName(String name) {
              this.name = name;
           }
        }

    我们可以使用字符串常量SUCCESS、ERROR

    struts.xml:如果不带参数的方法不指定,则默认行为是使用execute()方法

    <?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>
        <constant name="struts.devMode" value="true" />
          <package name="helloworld" namespace="/" extends="struts-default">
             <action name="hello" 
                class="com.struts2.test.HelloWorldAction" method="execute">
                <result name="success">/helloWorld.jsp</result>
                <result name="error">/accessDenied.jsp</result>
             </action>
          </package>
    </struts>  

     http://localhost:8080/Struts2/index.jsp

    点击say hello:

    点击say hello:

    ------------------------完毕----------------------------------------

    结构:

    拦截器

    AbstractInterceptor类可以扩展。这提供了一个默认的无操作实现 init() 和destroy()方法。

    MyInterceptor.java:

    package com.struts2.test;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    
    public class MyInterceptor extends AbstractInterceptor {
    
       /**
         * 
         */
        private static final long serialVersionUID = 1L;
    
    public String intercept(ActionInvocation invocation)throws Exception{
    
          //预处理
          System.out.println("预处理");
    
          //调用动作或下一个拦截器
          String result = invocation.invoke();
    
          //后期处理
          System.out.println("后期处理");
    
          return result;
    
       }
    }

    HelloWorldAction.java:

    package com.struts2.test;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class HelloWorldAction extends ActionSupport {
           /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private String name;
    
           public String execute() throws Exception {
               System.out.println("进入HelloWorldAction....");
               if ("成功".equals(name))
                  {
                     return SUCCESS;
                  }else{
                     return ERROR;  
                  }
           }
           
           public String getName() {
              return name;
           }
    
           public void setName(String name) {
              this.name = name;
           }
        }

    web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 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_2_5.xsd">
        <display-name>Struts2</display-name>
        <welcome-file-list>
          <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <!-- Struts2配置 -->
        <filter>
            <filter-name>struts2</filter-name>
            <!-- Filter的实现类 和struts2.5以前的不同 -->
            <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    </web-app>  

    http://localhost:8080/Struts2/index.jsp

    点击say hello:

    控制台:

    ----------------------完毕-------------------------------------

     结构:

    FreeMaker视图技术,用于生成输出。不依赖于使用JSP作为视图技术。

    hello.fm:

    hello  ${name} ! 

    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>
        <constant name="struts.devMode" value="true" />
       <package name="helloworld" extends="struts-default">
    
          <action name="hello" 
             class="com.struts2.test.HelloWorldAction"
             method="execute">
             <result name="success" type="freemarker">
                <param name="location">/hello.fm</param>
             </result>
          </action>
          
       </package>
    </struts>  

    http://localhost:8080/Struts2/index.jsp

    点击say hello

    ----------------------------------完毕-------------------------------

     

     

    分发调度RequestDispatcher.forward()

    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>
        <constant name="struts.devMode" value="true" />
        <package name="helloworld" extends="struts-default">
    
            <action name="hello" class="com.struts2.test.HelloWorldAction"
                method="execute">
                <result name="success" type="dispatcher">
                    <param name="location">
                        /helloWorld.jsp
                    </param>
                </result>
            </action>
    
        </package>
    </struts>  

    ----------------------------------完毕-------------------------------

    重定向 response.sendRedirect() 

    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>
        <constant name="struts.devMode" value="true" />
        <package name="helloworld" extends="struts-default">
    
            <action name="hello" class="com.struts2.test.HelloWorldAction"
                method="execute">
                <result name="success" type="redirect">
                    <param name="location">
                        /accessDenied.jsp
                    </param>
                </result>
            </action>
        </package>
    </struts>  

    ----------------------------------完毕-------------------------------

    OGNL对象图导航语言 用于引用和操作数据的值栈、数据传输和类型转换。

    值栈/OGNL:

    OGNL根据上下文和Struts建立一个ActionContext地图:

    1. application - 应用程序范围内的变量

    2. session - 会话范围的变量

    3. root / value stack -所有操作变量都存储在这里

    4. request - 请求范围的变量

    5. parameters - 请求参数

    6. atributes - 存储的属性页面,请求,会话和应用范围

    值栈中的对象始终可用,值栈中的对象可以直接引用.

    创建动作:访问值栈

    HelloWorldAction.java:

    package com.struts2.test;
    
    import java.util.*; 
    
    import com.opensymphony.xwork2.util.ValueStack;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class HelloWorldAction extends ActionSupport{
       /**
         * 
         */
        private static final long serialVersionUID = 1L;
    private String name;
    
       public String execute() throws Exception {
          ValueStack stack = ActionContext.getContext().getValueStack();
          Map<String, Object> context = new HashMap<String, Object>();
    
          context.put("key1", new String("值1")); 
          context.put("key2", new String("值2"));
          stack.push(context);
    
          System.out.println("Size of the valueStack: " + stack.size());
          return "success";
       }  
      //使用<s:property>标签访问值
       public String getName() {
          return name;
       }
    
       public void setName(String name) {
          this.name = name;
       }
    }

    index.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ taglib prefix="s" uri="/struts-tags"%>
    <!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>Hello World</title>
    </head>
    <body>
         <h1>Hello World From Struts2</h1>
       <form action="hello">
          <label for="name">请输入您的姓名</label><br/>
          <input type="text" name="name"/>
          <input type="submit" value="Say Hello"/>
       </form>
    </body>
    </html>     

    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>
        <constant name="struts.devMode" value="true" />
       <package name="helloworld" extends="struts-default">
          <action name="hello" class="com.struts2.test.HelloWorldAction" method="execute">
             <result name="success">/helloWorld.jsp</result>
          </action>
       </package>
    </struts>  

    helloWorld.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!--  taglib指令告诉Servlet容器中,这个页面将使用Struts2标签,这些标签之前,
        将通过s:property标签中显示的动作类的属性名称>HelloWorldAction类的getName()方法返回的值。 -->
    <!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>Hello World</title>
    </head>
    <body>
        <%-- 使用<s:property>标签访问值。值栈中的对象始终可用,值栈中的对象可以直接引用,而不是<s:property value="#name"/> --%>
        您输入的姓名 :<s:property value="name" /><br/>
        key1的值 :<s:property value="key1" /><br/>
        key2的值 :<s:property value="key2" /><br/>
    </body>
    </html>

    http://localhost:8080/Struts2/index.jsp

    点击say hello

    控制台:

    前台

    ----------------------------------完毕-------------------------------

     color.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
       <%@ taglib prefix="s" uri="/struts-tags"%>
       <!--  taglib指令告诉Servlet容器中,这个页面将使用Struts2标签,这些标签之前,
        将通过s:property标签中显示的动作类的属性名称>HelloWorldAction类的getName()方法返回的值。 -->
    <!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>Hello World</title>
    </head>
    <body>
        选择你喜欢的颜色:<s:select name="color" list="{'红','橙','蓝','绿','紫'}" />
    </body>
    </html>

    效果:

    ----------------------------------完毕-------------------------------

    -----------------------------------------------------------------------------
  • 相关阅读:
    Pythoy 数据类型序列化——json&pickle 模块
    Python xml 模块
    Spring MVC <mvc:annotation-driven/>的作用
    Spring MVC学习笔记
    springboot配置logback日志
    Git master合并分支时提示“Already up-to-date”
    解决idea tomcat乱码问题
    MYSQL 八大优化方案
    SpringBoot项目集成PageHelper使用
    Git--远程仓库版本回退方法
  • 原文地址:https://www.cnblogs.com/Alwaysbecoding/p/6938166.html
Copyright © 2011-2022 走看看