JAVA EE 学习笔记[V4 Struts 2框架试水]

Going on

  在有前面一些基础的时候可以把目光放向更远的地方了。Java EE 开发框架(刚开始接触有大佬告诉我这个是用来偷懒的,但既然存在,不可能只为偷懒)在一定程度上框架减轻了维护和开发压力,而Struts作为三大框架(还有Spring Hibernate)之一,也发展到了Struts2。要说起框架在Java EE开发过程中的地位,那如图:

若把Web应用看作是大楼,那框架则是每个房间单独的骨架,有了这个东西,建房写应用岂不美滋滋。

我在清楚的认识自己目前水平之后,理解和搞懂MVC模式下Struts框架是有一定困难的,但是使用是要掌握的。搞事:

什么是MVC模式?

    MVC模式将页面功能划分为控制器controller, 模型model,视图view三部分。

      Jsp负责生成动态网页,只用做显示页面(V)。

      Servlet负责流程控制,用来处理各种请求的分派(C)。

      JavaBeans负责业务模型,以及对数据库的操作(M)。

MVC模型的特点

   视图:视图是用户与之交互的界面。视图最大的作用就是输出数据并允许用户操作,它不关心数据的处理及操作的处理等工作,这些处理操作都交由控制器来完成。

   模型:在这三个部件中,模型拥有最多的处理任务。简单地说,模型部分就是对数据库的操作。模型一般被控制器调用。

             由于模型的代码只写一次就可以被多个视图重用,所以减少了代码的重复性。

   控制器:控制器主要接收用户的输入并调用模型和视图来完成用户的需求。它本身不输出任何东西做任何处理。

                它只接收请求并决定调用哪个模型来处理请求,然后确定用哪个视图来显示模型处理返回的数据。

MVC模型的优点

   低耦合性:各个模块各司其职,互不干涉,有利于开发中人员分工和组件重用。

   高重用性和可适用性:随着技术的不断进步,现在需要用越来越多的方式来访问应用程序。MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。

   可维护性:分开视图层和业务逻辑层也使得Web应用更易于维护和修改。

                    适合多人合作开发大型web项目 有利于软件工程化管理:

                    由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。

在这个模式下出现很多框架,而Struts1,Struts2,就是其中的两个框架

Struts框架的结构和工作流

(1)客户端发出请求,ActionForm封装数据,然后提交给ActionServlet。

(2)ActionServlet根据请求信息找到指定的Action,并将请求转发给Action。

(3)Action调用JavaBean(即模型)提供的业务逻辑方法处理请求,并返回ActionForward。

(4)ActionServlet根据ActionForward信息将请求转发给JSP页面。

(5)将最终页面返回给客户端。

啧啧。既然了解了工作原理图,我们继续按照惯例(依旧是熟悉的Myeclipse 2016 CI4):

 我们尝试用Struts2框架:

创建完毕,我们添加框架

 

此时我们查看生成的xml文件:

这个人把映射位置给到了index.jsp和default.jsp,为了方便测试,我把它改为:

然后在web-root目录下我创建login.jsp:

然后写入一个登陆的demo:

<%@ page language="java"  pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
    <title>登录页面</title>
    </head>
    <body>
    <form action="login.action" method="post">
    <table align="center" border=1  width="300" bgcolor=#F5FFE1>
    <tr><td colspan="2" align="center"  width="250" bgcolor="#CCCCFF">用户登录界面</td></tr>
    <tr><td width="50">姓名:</td><td><input type="text" name="username"/></td></tr>
    <tr><td width="50">密码:</td><td><input type="password" name="password" size=22/></td></tr>
    <tr><td  align="center" colspan=2><input type="submit" value="登录" />
 <input type="reset" value="重置" /></td></tr>
    </table>
    </form>
    </body>
</html>

继续创建一个.java在src目录下:

写入登陆的控制器内容:

package org.action;
public class LoginAction {
    private String username;
    private String password;
    public String getUsername() {
return username;
    }
    public void setUsername(String username) {
this.username = username;
    }
    public String getPassword() {
return password;
    }
    public void setPassword(String password) {
this.password = password;
    }
    public String execute(){
     //不做任何判断直接返回“success”
return "success";           
    }
}

然后对Struts.xml做出以下改动:

 在登陆成功之后会跳转到welcome.jsp,没有这个,继续:

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
     <head>
     <title>欢迎界面</title>
     </head>
     <body bgcolor=#F5FFE1>
        欢迎您!${username }
     </body>
</html>

 搞定这些东西也算一个简易的Demo制作完成

在上面这个过程执行当中完成了一下事件:

(1)浏览器请求login.jsp中表单action事件;

(2)struts容器接收到了login.action的请求,根据web.xml中的配置,服务器将包含有.action后缀的请求转到“FilterDispatcher”类进行处理,进入Struts 2的流程中。

(3)框架在struts.xml配置文件中查找名为“login”的action对应的类LoginAction。框架初始化该Action并且执行该Action类的execute方法。

(4)框架检查struts.xml以查看当返回时对应的页面。

        框架告诉容器来获得请求返回的结果页面welcome.jsp,在该页面中用EL表达式输出存在值栈中的值。(这里也可以用Struts 2提供的标签来输出)

而Struts2的结构主体是Action类,以及配合该类的三层过滤器filter和配置文件struts.xml。除此以外,视图层还配合有struts专用标签库、模板库等。

由上图可得 这个过程当中没有Servlet什么事情=-=这就很尴尬了。而单纯的java类的出现也让整个程序变得低耦合高内聚了(软工老师口头禅)

Struts2框架的特点

  Servlet退让!可以看出在整个流程中,没有servlet什么事。

  一切都通过更强大的java类进行程序设计。避免了struts1中JSP和servlet因为耦合过于紧密,导致视图层和控制器纠缠不清的问题。

  提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言。

  对于一个需要经过多层处理才能返回的请求,可以   使用过滤器和拦截器一层层地实现。 OGNL表达式语言功能强大,可以代替JSTL标签库。

通过对struts2框架的试用,很明显感受到了其主体Action类的重要性=-=很明显,今天我是消化不了了。改日继续

 (PS:再次致谢迪哥=-=,还有其实框架环境变量配置以及搭建蛮麻烦的,我这是沾了IDE的光)

原文地址:https://www.cnblogs.com/Stringair/p/6675571.html