Struts入门

    xiaoxiao2021-03-25  69

    Struts2是一个基于MVC设计模式的Web应用框架,作为控制器来建立模型与视图的数据交互,采用拦截器的机制来处理用户请求。是基于BS的HTTP交换协议,与Servlet API进行了解耦操作。

    工作原理

      

    1.Web容器接受到HttpServletRequest请求时,将请求传递个核心过滤器中的ActionContextCleanUp过滤器

    2.从ActionContextCleanUp过滤器出来后经过Other filters,再调用FilterDispatcher,再调用ActionMapper,确定请求哪个Action,返回一个收集Action详细信息的ActionMapping对象。

    3.FilterDispatcher将控制权委派给ActionProxy代理,调用配置管理器ConfigurationManager,从配置文件struts.xml读取配置信息,创建ActionInvocation对象。

    4.ActionInvocation对象调用Action时经过过滤器,如果执行结果中返回字符串,需要到struts.xml的Result中查找对应的JSP文件。

    5.Action执行后拦截器再次执行,最后响应HttpServletResponse被返回到核心过滤器中。

    入门案例

    1.导入Jar包

      

    2.配置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> 3.struts.xml:引入struts-2.3.dtd的约束

    package:配置文件分包管理

           name:包名,唯一性  extends:当前包的父包 abstract:是否为抽象包

           namespace:当前包的名称空间  URL=/名称空间+/name

    action:name:动作名称   class:动作类的全限定名   method:动作类中方法

    result:name:逻辑结果视图

            type:dispatcher请求转发,默认值;redirect:重定向;redirectction:重定向到某一动作,默认补全.action

            grobal-result:全局变量与类中一致

    <?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="abc" extends="struts-default"> <action name="hello" class="com.itheima.web.action.HelloAction" method="helloWorld"> <result name="success" type="dispatcher">/success.jsp</result> </action> </package> </struts> 3.动作类:返回值为String类型

    1)无侵入式创建动作类

    /* * 动作类 */ public class HelloAction { public String helloWorld(){ System.out.println("访问HellAction类的helloword方法!"); return "success"; } }

    2)实现Action接口创建动作类

    /* * 动作类:实现Action接口 */ public class HelloAction2 implements Action { @Override public String execute() throws Exception { System.out.println("HelloAction2执行了"); return SUCCESS; } } 3)继承ActionSupport类创建动作类

    /* * 继承ActionSupport类创建动作类 */ import com.opensymphony.xwork2.ActionSupport; public class HelloAction3 extends ActionSupport { private static final long serialVersionUID = 1L; }

    4.index.jsp

    <a href="${pageContext.request.contextPath}/hello. action">访问动作类</a> 5.结果显示

     

    配置文件

    按照加载顺序排列

    1.default.properties:配置的是键值对,是struts2中的核心jar包

    2.struts.default.xml:struts2中的核心jar包

    3.struts.plugin:struts2中的使用的插件

    4.struts.xml:自己配置的

    5.struts.properties:自己配置的键值对的

    6.web.xml:过滤器初始化参数,键值对形式的参数

    所以当我们可以通过修改struts.xmlstruts.properties、web.xml三者中的内容

    struts.xml

    <!-- 拦截内容 --> <constant name="struts.action.extension" value="abc"></constant> struts.properties:

    struts.action.extension=do

    web.xml:

    <init-param> <param-name>struts.action.extension</param-name> <param-value>html</param-value> </init-param> 因为加载顺序的缘故,所以如果重复设置后,按照加载顺序后的为准。

    小结:

    Struts2的框架大致就是这样,一些基本用法也有了,刚开始接触的时候感觉所以的框架都是为了解耦合,把一些重复的内容写到配置文件中,然后通过反射创建类调用方法,实现显示。

    转载请注明原文地址: https://ju.6miu.com/read-39919.html

    最新回复(0)