现在面试,动不动就要熟悉SSH什么的,表示压力很大呀,学习一下struts吧….
转载的文章,做个笔记,可能也会加点其他东西

struts

在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处?

设计目标

Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。

技术优势

Struts2有两方面的技术优势:
1. 所有的Struts2应用程序都是基于client/server HTTP交换协议,The Java Servlet API揭示了Java Servlet只是Java API的一个很小子集,这样我们可以在业务逻辑部分使用功能强大的Java语言进行程序设计。
2. 提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言、堆栈。

因为struts2有这样目标,并且有这样的优势,所以,这是我们学习struts2的理由.

struts是开源项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。

MVC即Model-View-Controller的缩写,是一种常用的设计模式。
我们用JSP+Servlet实现“一个应用的增改信息”,先来看一下,如果没有Struts,我们一般都是怎么做的。

这里写图片描述

  1. 首先是 V层
<body>
<a href="Servlet/Add.action">测试增加.....</a>
<a href="Servlet/Modify.action">测试修改.....</a>
</body>

C层
前端控制器servlet

package Control;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Controller extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //截取字符串
        String requestURI=request.getRequestURI();
        String flagAction = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));

        IAction action =null;

        //根据字符串转发相应的Action
        if("/Servlet/Add".equals(flagAction))
        {
            //TODO 采用读取配置文件,反射,这里省略,就直接NEW了
            action=new AddAction(); 
        }else if("/Servlet/Modify".equals(flagAction))
        {
            action =new ModifyAction();
        }

        //TODO 获取表单信息
        //TODO 将字符串转换为我们需要的格式等等,向下传递

        //得到转向信息
        String forwordString=action.Excute();

        //转发
        request.getRequestDispatcher(forwordString).forward(request, response);


    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }

}

配置文件

<servlet>
        <servlet-name>Controller</servlet-name>
        <servlet-class>Control.Controller</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Controller</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

Actoin接口和实现Action接口的增和改。

package Control;

public interface IAction {
    public String Excute();
}

package Control;

import Model.Manage;

public class AddAction implements IAction {

    public String Excute() {
        //执行MODEL层逻辑
        Manage manage=new Manage();
        manage.Add();

        //返回转向信息
        // TODO 可以在配置文件中读
        return "/AddSuccess.jsp";
    }
}


package Control;

import Model.Manage;

public class ModifyAction implements IAction {

    public String Excute() {
        //执行MODEL层逻辑
        Manage manage=new Manage();
        manage.Modify();

        //返回转向信息
        //TODO 可以在配置文件中读
        return "/ModifySuccess.jsp";
    }

}

M层
实现业务逻辑

package Model;

public class Manage {
    public void Add()
    {
        System.out.println("添加》》》》");
    }

    public void Modify()
    {
        System.out.println("更改》》》》");
    }
}

我们这么实现会有哪些问题?

1、实例化响应的Action,我们要么用if语句,手动创建,要么需要自己读配置文件,获取Action,反射实例化。
2、表单过来的所有数据都是字符串,我们需要手动转成响应的格式
3、转向信息,我们可能会写死,也可能手动去配置文件读
4、……
我们需要手动做很多事,而且很多重复劳动,还容易出错。

如果有个东西能为我代劳就简单得多了,所以Struts应运而生,Struts把我们上面提到的那些都做了封装,让我们的开发更高效,更有灵活性。上面的代码,用时序图表示如下,我们完全可以看做是Struts实现地基本原理。
这里写图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐