zoukankan      html  css  js  c++  java
  • Struts框架——(一)用Servlet + JSP演示Struts基本原理

    一. 用Servlet + JSP演示Struts基本原理

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

    如果没有Struts,我们怎么实现的?

    1)View层——JSP

    <body>
    <a href="Servlet/Add.action">测试增加》》》》》》》》》》</a>
    <a href="Servlet/Modify.action">测试修改》》》》》》》》》》</a>
    </body>

    2)control层 —— 前端控制器Servlet + 对应的action操作

     1 package Control
     2 
     3 import java.io.IOException;
     4 import javax.servlet.ServletException;
     5 import javax.servlet.http.HttpServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 public class Controller extends HttpServlet{
     9     protected void doGet(HttpServletRequest request, HttpServletResponse response)
    10         throws ServletException, IOException{
    11         // 截取字符串
    12         String requestURI = request.getRequsetURI();
    13         String flagAction = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));
    14 
    15         IAction action = null;
    16 
    17         //根据字符串转发相应的Action
    18         if ("/Servlet/Add".equals(flagAction)){
    19             // TODO 采用读取配置文件,反射,这里省略,直接new
    20             action = new AddAction();
    21         }
    22         else if ("Servlet/Modify".equals(flagAction)){
    23             action = new ModifyAction();
    24         }
    25         //TODO 获取表单信息  
    26         //TODO 将字符串转换为我们需要的格式等等,向下传递  
    27         
    28         //得到转向信息(转向对应的JSP)
    29         String fowardString = action.Excute();
    30         
    31         //转发
    32         request.getRequestDispatcher(fowardString).forward(request,response);
    33     }
    34     
    35     protected void doPost(HttpServletRequest request, HttpServletResponse response)
    36             throws ServletException, IOException{
    37         doGet(request,response);
    38     }
    39 }

    其中:需要在web.xml中修改配置文件:

    1 <servlet>
    2     <servlet-name>Controller</servlet-name>
    3     <servlet-class>Control.Controller</servlet-class>
    4 </servlet>
    5 
    6 <servlet-mapping>
    7     <servlet-name>Controller</servlet-name>
    8     <url-pattern>*.action</url-pattern>
    9 </servlet-mapping>

    AddAction和ModifyAction实现IAction接口,

    IAction:

    1 package Control;
    2 
    3 public interface IAction {
    4     public String Excute();
    5 }

    AddAction

     1 package Control;
     2 
     3 import Model.Manage;
     4 
     5 public class AddAction implements IAction {
     6 
     7     public String Excute() {
     8         //执行MODEL层逻辑
     9         Manage manage=new Manage();
    10         manage.Add();
    11         
    12         //返回转向信息
    13         // TODO 可以在配置文件中读
    14         return "/AddSuccess.jsp";
    15     }
    16 }

    ModifyAction

     1 package Control;
     2 
     3 import Model.Manage;
     4 
     5 public class ModifyAction implements IAction {
     6 
     7     public String Excute() {
     8         //执行MODEL层逻辑
     9         Manage manage=new Manage();
    10         manage.Modify();
    11         
    12         //返回转向信息
    13         //TODO 可以在配置文件中读
    14         return "/ModifySuccess.jsp";
    15     }
    16 
    17 }

    3)model层——业务逻辑层

     1 package Model;
     2 
     3 public class Manage {
     4     public void Add()
     5     {
     6         System.out.println("添加》》》》");
     7     }
     8     
     9     public void Modify()
    10     {
    11         System.out.println("更改》》》》");
    12     }
    13 }

    那么我们会遇到什么样的问题呢?

    1、实例化响应的Action,我们要么用if语句,手动创建,要么需要自己读配置文件,获取Action,反射实例化

    2、表单过来的所有数据都是字符串,我们需要手动转成响应的格式

    3、转向信息,我们可能会写死,也可能手动去配置文件读

    4、……

    我们需要手动做很多事,而且很多重复劳动,还容易出错。

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

    上面的代码用时序图可以这样表示:

     更多详情:http://blog.csdn.net/shan9liang/article/details/8686333

  • 相关阅读:
    JS使用及技巧.
    文件上传
    闭包
    文件拖拽上传
    zTree简单使用
    call apply bind
    jquery中操作jQuery对象的eq和get的差别与用法--操作前台显示之利器
    Cocos2d-x 文件路径下文件的读写
    Linux程序设计学习笔记----多线程编程基础概念与基本操作
    不easy查找Bug
  • 原文地址:https://www.cnblogs.com/lesleysbw/p/6246410.html
Copyright © 2011-2022 走看看