使用IDEA进行struts2+Spring+mybatis+maven框架整合(二)struts框架搭建

1、在pom.xml文件中加入struts2 core 的maven路径,然后自动引入jar包到External Libriries中:


      org.apache.struts
      struts2-core
      2.5.14.1
2、配置web.xml文件中struts2的过滤器:


    struts2
    org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter


    struts2
    *.action
    REQUEST
    FORWARD
         2.4版本的servlet规范在部属描述符中新增加了一个元素,这个元素有四个可能的值:即REQUEST,FORWARD,INCLUDE和ERROR,可以在一个元素中加入任意数目的,使得filter将会作用于直接从客户端过来的request,通过forward过来的request,通过include过来的request和通过过来的request。如果没有指定任何< dispatcher >元素,默认值是REQUEST。
3、在resources文件夹中创建struts.xml文件:


    
    
    
    
    
    
    
    
    
    

4、在main文件夹下创建java文件夹,并在java文件夹下创建包名(包名需要按照功能模块进行划分),我创建的是com.cxx.maven.cxx.action.base,并在该包下创建LoginAction类,该类继承ActionSupport类,并重写execute()方法,代码如下(这里先写简要代码,后期会根据功能的完善逐步完善代码):

package com.cxx.mavenssm.action.base;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    public String execute(){
        return "login";
    }
}

5、在struts.xml文件中加入如下代码:


        
            /WEB-INF/frame/login.jsp
        
         注意:

package节点是整个配置的核心部分。每个package,从语义上讲,其实代表了每一个独立的模块。

在这个模块中,你可以定义隶属于这个模块的行为方式,而与其他的模块没有关系。所以,每个package都有独立

interceptorresult-typeaction的定义,绝大多数的Runtime配置定义都是通过package节点实现的。

接下来我们就来详细讨论一下package中的属性和子节点。

1. name

name属性为每个package设置一个唯一的标识,这个标识在所有的package定义中不能重复。

2. abstract

标识这个package的定义是一个抽象定义,也就是允许他仅包含声明式的定义,而不需要在package定义中包含action的定义。

3. extends

通过使用extends,你可以指定本package继承另外一个package的所有的配置。当某个package继承了另外一个package

所有配置,那么你就无需对父package中已经声明过的配置定义做再次的定义。

同时,如果重复定义父package中已声明过的配置定义,那么这些重复定义声明将覆盖父package中的相关定义。

4. namespace

namespace的作用:对于action配置进行逻辑划分。

如果我们不为package节点指定namespaceStruts2默认使用一个空字符串作为默认的namespace。当然,

也可以使用"/"等字符串来表示namespace

定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test,那么在xxx.jsp中访问的地址

http://localhost:8080/struts2/test/XX.action

Struts2在根据URL进行寻址的时候,使用以下的步骤:

1) 根据URL进行NamespaceActionName的计算

2) 根据计算的得到的NamespaceActionName查找package节点中相应配置

3) 如果查找失败,则查找Namespace为空,ActionName为整个URL的配置


上面注意这段出自:http://blog.csdn.net/educast/article/details/52043338。

6、修改webapp文件夹下的index.jsp文件,转发到login.jsp页面:


     

转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

        怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。 

转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
7、在WEB-INF文件夹下创建frame文件夹并创建login.jsp文件,该文件内的内容可随意,主要是为了测试struts2是否起作用了。
8、启动项目,输入url地址:http://localhost:8088/MavenSSM/,这时你会发现浏览器显示的是/WEB-INF/frame/login.jsp
页面的内容。这是因为请求地址到默认的index.jsp页面时,在该页面进行转发到struts2的loginAction中,映射到
LoginAction.java的execute()方法,根据"login"返回值返回到/WEB-INF/frame/login.jsp页面。
注:因为struts2对其WEB-INF下的jsp文件进行保护,通过url地址直接访问是访问不到的,需要外部的jsp文件进行转发到其内部的jsp文件,然后通过struts2框架进行资源文件的访问。


























你可能感兴趣的:(使用IDEA进行struts2+Spring+mybatis+maven框架整合(二)struts框架搭建)