创建struts项目

来源:互联网 发布:恋恋软件 编辑:程序博客网 时间:2024/06/06 18:48

1:搭建Struts工程的步骤

 

   A:加载Struts的jar包。通过struts-blank.war包中,拷贝最基础运行的jar包。

 

   B:在web.xml中配置Strtuts的核心控制器

  

      <filter>

         <filter-name>struts2</filter-name>

         <filterclass>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

      </filter>

  

      <filter-mapping>

         <filter-name>struts2</filter-name>

         <url-pattern>/*</url-pattern>

      </filter-mapping> 

     

   C:在src目录下,创建struts.xml框架的配置文件。


      <?xmlversion="1.0" encoding="UTF-8" ?>

      <!DOCTYPE struts PUBLIC

         "-//ApacheSoftware Foundation//DTD Struts Configuration 2.3//EN"

         "http://struts.apache.org/dtds/struts-2.3.dtd">

      <struts>

         <constantname="struts.enable.DynamicMethodInvocation" value="false"/>

         <constantname="struts.devMode" value="true" />

     

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

         </package>

      </struts>

     

   D: 创建Struts的Action类。并且添加一个名为execute(只能命名为execute)的方法。

  

      package com.action;

     

      public class FirstAction {

     

         public String execute() throwsException {

     

            return null;

         }

      }

     

   E:在Struts.xml中,对Action类做路径的映射。

      WEB页面访问是URL路径。

     

      <action name="xx"class="com.action.FirstAction"></action>

     

      对FirstAction的路径命名为xx

     

   F:页面中访问xx的请求路径。

  

      <a href="${pageContext.request.contextPath}/xx">访问FirstAction</a>

     

   G:设定Action执行完成之后,返回的Result结果。

     

      public String execute() throws Exception {

         System.out.println("FirstAction中的Execute方法被执行....");

         return "error";

      }

  

      <action name="xx"class="com.action.FirstAction">

         <result name="succ">/test_succ.jsp</result>

         <result name="error">/test_error.jsp</result>

      </action>

     

      根据execute方法中返回的字符串,对应Action配置中的result的名称。

     

      如果匹配的话,那么就会跳转到相应的jsp页面或者freemarker页面。

     

 

2:Struts 2框架的大致处理流程如下:

 

   A:浏览器发送请求,例如请求/xx、等。

 

   B: Control中的核心控制器StrutsPrepareAndExecuteFilter根据请求路径(/xx与struts.xml中配置的action的name

  

      进行匹配),调用相应的业务逻辑控制器(Action)。

 

   C:Struts2的拦截器栈自动对请求应用通用功能,如数据校验和文件上传等功能。

  

   D:回调Action中的execute()方法,并在方法体内调用业务逻辑组件来处理请求(Model)。

  

      既可以是将数据保存到数据库,也可以从数据库中检索信息。

  

      实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。

 

   E:execute()方法将调用业务逻辑组件(Model)得到的数据返还并更新视图层(View),

  

      此时支持的视图技术非常多,既支持JSP,也支持FreeMarker等模板技术。

     

     

3:struts工程中可以运行Servlet

 

   3.1:Struts核心控制器,默认拦截/*的请求。(拦截的是无后缀名或者后缀名为action的请求。)

  

      把servlet的后缀名,进行变更。

     

      <servlet>

         <servlet-name>FirstServlet</servlet-name>

         <servlet-class>com.servlet.FirstServlet</servlet-class>

      </servlet>

      <servlet-mapping>

         <servlet-name>FirstServlet</servlet-name>

         <url-pattern>/servlet/FirstServlet.svt</url-pattern>

      </servlet-mapping>

     

      那么访问路径:

     

      <a href="${pageContext.request.contextPath}/servlet/FirstServlet.svt">2:运行FirstServlet</a>

     

    3.2:重写Struts的过滤器,如果是SErvlet的请求路径的话,则不进行处理。

 

      public class StrutsFilter extendsStrutsPrepareAndExecuteFilter {

     

         @Override

         public void doFilter(ServletRequest req, ServletResponse res,

                FilterChain chain) throwsIOException, ServletException {

            HttpServletRequest request =(HttpServletRequest) req;

     

            String requestURI =request.getRequestURI();

     

            if (requestURI.indexOf("/servlet") != -1) {

                /**

                 * 表示访问的路径是一个Servlet

                */

                chain.doFilter(req, res);

            } else {

                /**

                 * 调用Struts的核心控制器继续处理

                 */

                super.doFilter(req, res, chain);

            }

     

         }

      }

     

      web.xml中重新配置。

      <filter>

         <filter-name>struts2</filter-name>

         <filter-class>com.filter.StrutsFilter</filter-class>

      </filter>

      <filter-mapping>

         <filter-name>struts2</filter-name>

         <url-pattern>/*</url-pattern>

      </filter-mapping>    

  

4:struts核心配置文件(struts.xml)

 

    4.1:constrant的配置,常量可以配置在以下的文件列表中。最后面的配置会覆盖前面的配置。

  

      1.struts-default.xml  \WEB-INF\lib\struts2-core-2.3.28.jar\struts-default.xml。一般不进行配置。

      3.struts.xml       \src目录下

         <constantname="struts.devMode" value="true" />

        

      4.struts.properties   \src目录下,手工进行创建

     

            struts.devMode = false

           

      5.web.xml          \WEB-INF目录下。

         <filter>

            <filter-name>struts2</filter-name>

            <filter-class>com.filter.StrutsFilter</filter-class>

            <init-param>

                <param-name>struts.devMode</param-name>

                <param-value>true</param-value>

            </init-param>

     

            <init-param>

                <param-name>struts.enable.DynamicMethodInvocation</param-name>

                <param-value>true</param-value>

            </init-param>

         </filter>   

     

   4.2:常用的常量配置。

  

      Struts中所有的常量定义:\struts2-core-2.3.28.jar\org.apache.struts2\default.properties

     

      struts.i18n.encoding=UTF-8                  //设定编码

      struts.multipart.maxSize=2097152            //设定上传文件的大小

      struts.action.extension=action,,            //设定Struts的后缀名

      struts.enable.DynamicMethodInvocation =false   //是否开启Struts的动态方法调用

      struts.devMode = false                   //是否处于开发模式

      struts.ui.theme=xhtml                    //设定UI控件的主题

      struts.ognl.allowStaticMethodAccess=false   //是否允许ONGL表达式调用静态方法。

 

    4.3:include配置。

      包含其他的配置文件,用于团队项目。

     

      规则:不同的配置文件中,package与namespace的名称不能重复。

     

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

     

      <include file="struts-user.xml"></include>

     

  

    4.4:package配置

   <package

      name=""            package的命名,不能重复。用于package之间的继承。

      namespace=""       action访问的命名空间。

     

     

      extends=""            继承哪一个package,默认继承struts-default

      abstract="true|false" true:表示是一个抽象包。抽象包中不能定义action

      ></package>

     

   完整的Action访问路径:

  

      命名空间 + action的名称

     

      路径中的访问命名空间>=struts.xml中定义的命名空间。

     

      /aa/bb/cc/dd/ee/XXXAction     /aa/bb

     

    4.5:action的配置。

  

      <action name=""          action的名称

            class=""        action类的路径

            method=""       默认执行execute方法,

                                   但是可以通过method属性来指定调用哪一个方法。

            ></action>

           

    4.6:result的配置。

     

         <result

        

            name=""         result的名称

        

            type="">        result类型。

        

                请求转发到Action : chain"

                请求转发到页面                 dispatcher"                    

               

                重定向到页面:                     redirect"

                 重定向到Action       redirectAction"

                返回的result是一个流类型:用于文件下载:stream"

                            

        

         </result>   

  

         <result name="forward_jsp"type="dispatcher">/forward_jsp.jsp</result>

         <resultname="redirect_jsp" type="redirect">/redirect_jsp.jsp</result>

        

         <resultname="forward_action" type="chain">

            <param name="namespace">/</param>

            <paramname="actionName">xx</param>

            <paramname="methodName">execute</param>

         </result>

        

         <result name="redirect_action"type="redirectAction">

            <param name="namespace">/</param>

            <paramname="actionName">xx</param>

            <paramname="methodName">execute</param>

         </result>

0 0
原创粉丝点击