Struts框架介绍&解决中文乱码

1、Struts实现MVC的机制

    在Struts框架中,模型由实现业务逻辑的JavaBean组件构成,控制器由ActionServlet和Action来实现,视图层由一组JSP文件与Struts标签库构成。Struts实现的MVC设计模式如下图所示。

    

    1.1视图层

        Struts框架中的视图部分可以采用JSP来实现。在这些JSP文件中没有业务逻辑,也没有模型信息,只有标签,这些标签可以是标准的JSP标签或客户化标签,例如Struts标签库中的标签。

        当用户通过视图向Servlet发送数据时使用了Struts中的ActionForm组件,该组件通常也被归为视图。ActionForm的作用就是将用户提交的数据编译成Bean对象,除了基本的getXXX()和setXXX()方法外,还提供了另外两种特殊的方法用于对用户提交的数据进行一些初始化及验证操作。

    1.2模型层

        模型表示应用程序的状态和业务逻辑。对于大型应用,业务逻辑通常采用EJB或其他对象关系映射工具(如Hibernate、iBatis)来实现模型组件,我基本都是用iBatis来实现。

    1.3控制器层

        Struts提供了一个控制器组件ActionServlet,它继承了HttpServlet,并重载了HttpServlet的doGet()和doPost()方法,可以接受HTTP响应,并进行转发。同时还提供了使用XML进行转发Mapping(映射)的功能。

    1.4配置struts-config.xml

        用户请求是通过ActionServlet来处理和转发的,这就需要一些描述用户请求路径和Action映射关系的配置信息了。在Struts中,这些配置映射信息都存储在特定的XML文件struts-config.xml中。在该配置文件中,每一个Action的映射信息都是通过一个<Action>元素来配置。如下图所示。

                      

        这些配置信息在系统启动时,会被读入到内存当中,供Struts在运行期间使用。在内存中,每一个<action>元素都对应一个org.apache.struts.action.ActionMapping类的实例。

2、Struts的工作流程

    在web应用启动时就会加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放在各种配置对象中,例如,Action的映射信息存放在Action Mapping对象中。当Action Servlet接收到一个客户请求时,将执行如下流程:

    (1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。

    (2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。

    (3)根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。

    (4)如果ActionFrom的validate()方法返回null或者返回一个不包含Action Message的ActionErrors对象,就表示表单验证成功;如果ActionForm的validate()方法返回一个包含一个或多个ActionMessage的ActionError对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含用户提交表单的JSP组件,在这种情况下,不会再创建Action对象并调用Action的execute()方法。

    (5)ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。

    (6)Action的execute()方法返回一个ActionForward对象,再通过ActionServlet把客户请求转发给ActionForward对象指向的JSP组件。

    (7)ActionForward对象指向的JSP组件生成动态网页,返回给客户

3、Struts中文乱码问题

    通常情况下解决中文乱码问题采用的是编写一个将ISO-8859-1编码转换为GBK编码的方法,然后在出现乱码的位置调用该方法即可达到解决中文乱码的目的,但是这样做很不方便。Struts提供了一个快速解决中文乱码问题的方法,那就是配置和扩展RequestProcessor类实现。下面将详细介绍在Struts中解决中文乱码问题的方法。

    (1)创建SelfRequestProcessor.java类文件,该类继承了RequestProcessor类,并重写processPreprocess()方法,在该方法中设置Request对象的请求编码为GBK编码。具体代码如下:


    (2)在struts-config.xml文件总利用<controller>元素配置自定义控制器组件SelfRequsetProcessor,用于对请求的参数进行转码。具体代码如下:

    <controller processorClass="com.action.SelfRequestProcessor"/>

    配置<controller>元素主要是为了能让Struts识别开发者自定义的控制器组件。

  【注】关于程序中用到导入导出功能出现表格名称中文乱码等问题,只需在tomcat中简单设置即可,这里不再赘述,有问题可以留言我。

猜你喜欢

转载自blog.csdn.net/knight_key/article/details/80309791