Struts2 MVC基础介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunshinedark/article/details/83869677

1.配置核心过滤器

在web.xml中配置下面的内容:

<filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
 </filter-mapping>

2.创建Action

  1. POJO
    Action不需要实现任何接口,不需要继承任何类,但是需要包含一个方法:public String execute() throws Exception。这个方法是处理请求的入口,由Struts框架调用。这个方法的名字可以自行定义,但是execute是默认的名字,使用这个可以省去一项属性配置。
  2. 实现Action接口
    全称com.opensymphony.xwork2.Action,这个接口定义了几个字符串常量,作为result;还定义了execute方法。
  3. 继承ActionSupport
    全称com.opensymphony.xwork2.ActionSupport,实现了Action

2.3.2.实现action接口(列一种)

package cn.ljl.note.struts2.login.actions;
 
import com.opensymphony.xwork2.Action;
 
public class LoginAction implements Action{
  private static final String VALID_USER = "admin";
  private static final String VALID_PWD = "admin";
  
  private String username;
  private String password;
  private String tip;
  
  public String getUsername() {
     return username;
  }
  public void setUsername(String username) {
     this.username = username;
  }
  public String getPassword() {
     return password;
  }
  public void setPassword(String password) {
     this.password = password;
  }
  public String getTip() {
     return tip;
  }
  public void setTip(String tip) {
     this.tip = tip;
  }
  
  @Override
  public String execute() throws Exception {
     boolean validUser = VALID_USER.equals(getUsername());
     boolean validPwd = VALID_PWD.equals(getPassword());
     
     if (!validUser) {
       setTip("用户不存在!");
       return LOGIN;
     }
     
     if (!validPwd) {
       setTip("密码不正确!");
       return LOGIN;
     }
     
     setTip(null);
     return SUCCESS;
  }
}

3.配置action

3.1.配置文件

'

Struts2的常规配置文件是struts.xml,这个文件放在源文件夹的根目录。应该把它放在src目录下。

配置文件的结构像下面这样:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    
</struts>

3.2.命名空间

一次请求的地址,像这个样子:

http://localhost:8080/note-struts2/login/check.action

在Struts2看来,/login称为命名空间;check称为action-name;.action是后缀,在解析的时候会自动去掉。

命名空间可以多级,就像目录结构一样,一层层;action-name就像是文件名。

在struts.xml中,使用<package>的namespace属性来指定命名空间,所以action的定义都是在<package>下定义的。比如,我们可以这样定义:

<package name="login" extends="struts-default" namespace="/login">
  ......
</package>

上述代码片段,涉及到3个package属性:

  • name
    name唯一标识一个package
  • extends
    package有继承的特性,使用extends指定另一个package的name,就会继承彼package下所定义的内容。
    这里继承的struts-default是在struts2-core的struts-default.xml中定义的。通常,建议继承struts-default。
  • namespace
    配置命名空间。

默认的命名空间

namespace不是必需的属性,如果没有配置,那就是默认的命名空间。默认的命名空间有特殊的作用:如果在请求的URL中解析出来的命名空间里找不到对应的action,就到默认的命名空间里找。默认命名空间是一个抽象的概念,不是默认值,你不能说“我可以通过配置namespace等于默认值,来指定默认命名空间”。比如"/"被称为根命名空间,但是它不是默认命名空间,它也没有任何特殊的性质,就和其他命名空间一样。

3.3.action

即配置action映射,struts框架需要查找这个映射,才能根据URL找到实际的处理Action。action是在<package>元素内配置的,下面是一个demo:

<action name="check" class="cn.ljl.note.struts2.login.actions.LoginActionSupport" method="execute">
    ......
</action>

<action>元素有3个基本的属性:

  • name
    它同时也是action的url请求地址的一部分,同一个命名空间下,action的name要唯一
  • class
    它是Action类,负责处理用户的请求。这是一个非必需的属性,默认为com.opensymphony.xwork2.ActionSupport;你可以看下这个类的execute方法,只是直接返回SUCCESS。
  • method
    它是Action的方法名,对于框架来说,相当于回调方法。框架会调用这个方法,以达到通知请求到达的效果。这是一个非必需的属性,默认值为execute,所以上面的demo完全不用配置这个属性。
  •  

3.4.result

即配置result映射,根据这个映射,struts框架才能根据Action返回的逻辑结果(字符串)找到对应的视图资源。result是在<action>元素内配置的,下面是一个demo:

<result name="success">/index.jsp</result>
<result name="login">/login/login.jsp</result>

<result>元素的属性name代表Action返回的逻辑结果;<result>体的内容,代表物理视图的路径。其中name的默认值是"success",所以第1行不用配置name属性。

struts有个自带标签 s:

<%@ taglib uri="/struts-tags" prefix="s" %>
<s:property value="exceptionStack"/> //输出结果(返回值)

猜你喜欢

转载自blog.csdn.net/sunshinedark/article/details/83869677