zoukankan      html  css  js  c++  java
  • Struts2 详解

    前面我们通过下面两篇博客,已经对 Servlet 有了比较深刻的理解,那么接下来我们详细介绍 Servlet 的升级版框架----Struts2

         Servlet 详解:http://www.cnblogs.com/ysocean/p/6912191.html

         改进 Sevlert ----Struts2入门: http://www.cnblogs.com/ysocean/p/6913484.html

    首先我们还是回顾一下 Servlet 的缺点:

      ①、一个请求对应一个 Servlet,即每一个请求我们都需要在 web.xml 文件中配置映射。如果项目大,请求很多,那么会造成 web.xml 很大,很难维护。

      ②、即便在好几个请求对应一个 Servlet,即在 service() 方法中,通过 if--else 语句来判断执行的代码块。那这样就会造成 service() 方法很拥挤。

      ③、一个项目只存在一个 web.xml 文件,如果一个项目是多人开发,那么整合代码开发过程中会有很多问题。不适合团队开发。

      ④、Servlet中doGet方法和doPost方法中的两个参数reqeust,response拥有严重的容器依赖性。

      ⑤、如果页面上表单中的元素比较复杂,则在Servlet的方法中获取表单元素的数据比较繁琐。

      ⑥、Servlet是单线程的,只要在Servlet中的声明一个实例变量,那么该变量在多线程访问时就会有线程安全问题。

      ⑦、在Servlet中处理异常,如果Servlet中有N个方法,则这N个方法必须都要try--catch。因为子类抛的异常不能大于父类。

      而在这篇博客中:改进 Sevlert ----Struts2入门: http://www.cnblogs.com/ysocean/p/6913484.html 我们已经解决了相应的一些问题,但是并没有完全解决。而完全解决的办法就是我们这篇文章的主角------Struts2

    1、什么是 Struts2 ?

      Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是

    struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的

    设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

    2、Struts2 入门实例(先不管原理是什么,先看是怎么实现的)

      第一步:创建一个 web 工程,并将相应的 jar 包复制到 lib 目录下

      

       第二步:在 WEB-INF 目录下,创建 web.xml 文件,并添加 struts2 拦截器

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
       id="WebApp_ID" version="3.0">
       
      <!-- 配置Struts2的过滤器 -->
    	<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>
    </web-app>
    

      

      第三步:在 src 目录下,创建一个Java文件,HelloWorldAction,包名为 com.ys.action

    package com.ys.action;
    
    public class HelloWorldAction {
    	
    	public String execute(){
    		System.out.println("执行Action.....");
    		return "success";
    	}
    
    }
    

      

      第四步:在 src 目录下,创建 struts.xml 文件,并添加如下代码

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
    <struts>
       <package name="user" namespace="/" extends="struts-default">
         	<action name="helloAction" class="com.ys.action.HelloWorldAction">
         		<result name="success">success.jsp</result>
         	</action>
       </package>  
    </struts>	
    

      

       第五步:我们创建一个 index.jsp 文件,然后点击页面上的超链接,跳转到 success.jsp 页面

    index.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>Insert title here</title>
    </head>
    <body>
    	<a href="helloAction">点击跳转到 success.jsp 页面</a>
    </body>
    </html>  

    success.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>Insert title here</title>
    </head>
    <body>
    	success.jsp
    </body>
    </html>
    

      

     验证:我们将项目发布到 tomcat 服务器,然后输入链接:http://localhost:8080/HelloStruts2/index.jsp

      

      然后鼠标点击 超链接,发现页面跳转到 如下界面:

      

    3、struts2 执行流程

      

    tomcat 服务器启动时做的工作

      ①、加载 web.xml 文件配置的过滤器,调用过滤器的 init()方法,初始化所有资源文件,主要包括 default.properties 文件,struts-default.xml,strut-plugin.xml,struts.xml 文件

    struts2 执行流程

    1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

    2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

    3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;

    4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

    5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

    6、ActionProxy创建一个ActionInvocation的实例。

    7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

    8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。

  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/ysocean/p/6913568.html
Copyright © 2011-2022 走看看