MVC

概念

MVC全名是Model View Controller,是模型(model)—视图(view)—控制器(controller)的缩写,知道这么多就够了。

大家都知道SUN公司对于MVC模式先后推出的一种规范,第一种是JSP Model1,第二种则是JSP Model2;Model1就是jsp + javabean,Model2就是jsp + servlet + javabean两种模式,前者是纯JSP,后者是简单的MVC。我们通过两个时序图来对比一下Model1和Model2:

Model1

优点:

1、编码简单

2、适合小型项目

缺点:

1、显示层与业务逻辑混在一起

2、jsp的职责不单一,职责过重,不便于维护

Model2

优点:

1、分层清晰,职责清楚,比较适合于大型项目架构

2、可扩展性强

3、实现了业务逻辑和显示分离,降低系统的耦合度

缺点:

1、增加了大量编写代码的工作量

对比

Model1在一定程序上实现了MVC,即JSP是控制层与表示层合二为一了,这样的效果显然不如将控制层单独划分出来的好。而Model2则是将控制层(sevlet)单独的划分出来了,专门负责业务流程的控制,接受页面的请求,创建所需的javabean实例,并将处理后的数据再返回给JSP,渲染页面,这样分层清晰,可扩展性强,降低系统的耦合度。

Struts1

概念

说概念真谈不上,Struts实质上就是采用JavaServlet/JSP技术,在Model2的基础上实现的一个MVC框架。

Struts1实现MVC的模型图

各部分的职责

虽然说Struts不难,但对于初学者而言,真正的弄明白Struts也是一件很简单的事,我们介绍一下几个关键点的职责,以便对struts的原理有更进一步的认识。

ActionServlet,前端控制器

1、根据相应的规则截取Http请求的URL

2、将Http请求分发到相应的Action处理

ActionForm,相当于实体

1、收集表单数据,将表单数据转换成相应的数据类型

Action,业务层控制器

1、 取得表单数据
2、调用业务逻辑
3、返回转向信息

我们再根据登录实例,对比上面的模型图,进一步理解一下Struts的基本原理,最后做一下总结。

登录实例

1、配置Struts

*拷贝struts相关的jar到WEB-INF/lib下
*在web.xml文件中配置ActionServlet
*提供struts-config.xml文件,需要放到WEB-INF下

如图所示:

2、编写代码

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://<a href="http://lib.csdn.net/base/17" class="replace_word" title="Java EE知识库" target="_blank" style="color:#df3434; font-weight:bold;">java</a>.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <welcome-file-list>
  8. <welcome-file>index.jsp</welcome-file>
  9. </welcome-file-list>
  10. <!-- 标准 ActionServlet 配置文件-->
  11. <servlet>
  12. <servlet-name>action</servlet-name>
  13. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  14. <init-param>
  15. <param-name>config</param-name>
  16. <param-value>/WEB-INF/struts-config.xml</param-value>
  17. </init-param>
  18. <init-param>
  19. <param-name>debug</param-name>
  20. <param-value>2</param-value>
  21. </init-param>
  22. <init-param>
  23. <param-name>detail</param-name>
  24. <param-value>2</param-value>
  25. </init-param>
  26. <load-on-startup>2</load-on-startup>
  27. </servlet>
  28. <!-- 标准 ActionServlet Mapping配置信息 -->
  29. <servlet-mapping>
  30. <servlet-name>action</servlet-name>
  31. <url-pattern>*.do</url-pattern>
  32. </servlet-mapping>
  33. </web-app>

struts-config.xml

  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2. <!DOCTYPE struts-config PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
  4. "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
  5. <struts-config>
  6. <form-beans>
  7. <form-bean name="loginForm" type="com.liang.struts.LoginActionForm"></form-bean>
  8. </form-beans>
  9. <action-mappings>
  10. <action path="/login"
  11. type="com.liang.struts.LoginAction"
  12. name="loginForm"
  13. scope="request"
  14. >
  15. <forward name="success" path="/login_success.jsp"></forward>
  16. <forward name="error" path="/login_error.jsp"></forward>
  17. </action>
  18. </action-mappings>
  19. </struts-config>

LoginAction

  1. package com.liang.struts;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.apache.struts.action.Action;
  5. import org.apache.struts.action.ActionForm;
  6. import org.apache.struts.action.ActionForward;
  7. import org.apache.struts.action.ActionMapping;
  8. /**
  9. * 登录Action
  10. * 负责取得表单数据,调用业务逻辑,返回转向信息
  11. * @author liang
  12. *
  13. */
  14. public class LoginAction extends Action {
  15. @Override
  16. public ActionForward execute(ActionMapping mapping, ActionForm form,
  17. HttpServletRequest request, HttpServletResponse response)
  18. throws Exception {
  19. LoginActionForm laf =(LoginActionForm)form;
  20. //从ActionForm获取表单数据
  21. String username = laf.getUsername();
  22. String password = laf.getPassword();
  23. UserManager userManager = new UserManager();
  24. try{
  25. //调用业务逻辑
  26. userManager.login(username, password);
  27. //跳转到成功页面
  28. return mapping.findForward("success");
  29. }catch(UserNotFoundException e){
  30. e.printStackTrace();
  31. request.setAttribute("msg", "用户不能找到,用户名称=[" + username + "]");
  32. }catch(PasswordErrorException e){
  33. e.printStackTrace();
  34. request.setAttribute("msg", "密码错误");
  35. }
  36. //跳转到失败页面
  37. return mapping.findForward("error");
  38. }
  39. }

LoginActionForm

  1. package com.liang.struts;
  2. import org.apache.struts.action.ActionForm;
  3. /**
  4. * 登录ActionForm,负责表单收集数据
  5. * 表单的属性必须和ActionForm中的get和set的属性一致
  6. * @author liang
  7. *
  8. */
  9. @SuppressWarnings("serial")
  10. public class LoginActionForm extends ActionForm {
  11. private String username;
  12. private String password;
  13. public String getUsername() {
  14. return username;
  15. }
  16. public void setUsername(String username) {
  17. this.username = username;
  18. }
  19. public String getPassword() {
  20. return password;
  21. }
  22. public void setPassword(String password) {
  23. this.password = password;
  24. }
  25. }

login.jsp

  1. <%@ page language="java" contentType="text/html; charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="login.do" method="post">
  11. 用户:<input type="text" name="username"><br>
  12. 密码:<input type="password" name="password"><br>
  13. <input type="submit" value="登录"><br>
  14. </form>
  15. </body>
  16. </html>

PS:登录页面不难,主要是一定注意action的名字和ActionServlet的配置一致。

总结

Struts很好的封装了MVC,界面从业务逻辑分离出来,灵活多变,同时,使用配置文件将控制层也变得更加灵活,降低了系统耦合。大道至简,一切变得轻松,简单了。

源码

留个悬念,下篇博文,我们一步步重构MVC实现Struts框架的流程。

 
 

Struts基本原理 + 实现简单登录(二)的更多相关文章

  1. 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)

    上面博文,主要简单的介绍了一下SSH的基本概念,比較宏观,作为刚開始学习的人可以有一个总体上的认识,个人觉得对学习有非常好的辅助功能.它不不过一个"瞭望塔".更是检验是否真正掌握全 ...

  2. Struts框架——(一)用Servlet + JSP演示Struts基本原理

    一. 用Servlet + JSP演示Struts基本原理 struts是开源项目.它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架.Stru ...

  3. 【ADO.NET】2、各种版本的 简单登录验证

    一.简单登录验证(防SQL注入) GetString(序号) 返回某一列的值(当用户不记得列名序号时,可使用GetOrdinal()获取到序号)GetInt32(序号) 针对的是 int 字段,返回i ...

  4. 玩转spring boot——简单登录认证

    前言 在一个web项目中,某些页面是可以匿名访问的,但有些页面则不能.spring mvc提供了HandlerInterceptor接口来应对,只需要重写preHandle方法便可以实现此功能.那么使 ...

  5. Spring Security 整合freemaker 实现简单登录和角色控制

    Spring Security 整合freemaker 实现简单登录和角色控制     写这篇文章是因为我做了一个电商网站项目,近期刚加上权限控制.整个过程很简单,在此给大家梳理一下,也算是自己对知识 ...

  6. Struts1入门实例(简单登录)

    Struts1入门实例(简单登录) 现在开始加入公司的核心项目,但由于项目开发比较早,所以使用的技术不是很新潮,前台用的还是struts1. 虽然不是什么新技术,但仍可以从中学到好多东西的.花了一个晚 ...

  7. tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册

    tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册 引言 #在数据库,所谓表关系,只是人为认为的添加上去的表与表之间的关系,只是逻辑上认为的关系,实际上数据库里面的表之间 ...

  8. Struts2---配置文件讲解及简单登录示例

    bean 用于创建一个JavaBean实例 constant 用于Struts2默认行为标签 <!-- 配置web默认编码集,相当于HttpServletRequest.setChartacte ...

  9. Java简单登录图形界面

    本文参考与:https://blog.csdn.net/wyf2017/article/details/78831744 https://blog.csdn.net/MengKun822/articl ...

随机推荐

  1. linux 进程的 5 大段

    BSS段:BSS段(bss segment)通常是指用来存放程序中数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域.数据段属于静态内存分配. 数据段:数 ...

  2. wcf 入门示例

    刚开始学习wcf,根据官方网站的说明写下的代码 第一步: 建立一个类库项目GettingStartedLib,首先添加wcf引用System.ServiceModel; 添加接口ICalculator ...

  3. elasticsearch报错syncedb_path

    一般默认syncdb_path在$HOME目录下隐藏文件,也可以自己指定一个文件,记住,这里只能指定文件,不能只写目录input { file { path => "/home/tom ...

  4. tomcat安装配置规范

    tomcat用户设置 1 2 [root@host-1 ~]# useradd -u 501 tomcat [root@host-1 ~]# passwd tomcat   安装JDK 1 2 3 4 ...

  5. 红米手机连接logcat,调试信息刷屏解决办法

    我买了红米,平时拿它来当作安卓测试机的 可是把它接入eclipse里面,发现它会往logcat打印大量的日志,我自己想调试一个程序的时候,自己的程序的日志一会儿就被冲刷没了 新建一个logcat me ...

  6. Java并发编程(一)学习大纲

    (一)学习大纲 (二)线程与并发编程的概念 (三)线程安全.原子操作.复合操作.竞态条件.加锁机制(内置锁.重入) (四)对象的共享:可见性.失效数据.非原子的64位操作,加锁与可见性,volatil ...

  7. linux下apache+php搭建配置记录

    第1章  环境说明1.1 系统说明Centos 6.2 (最小化安装)1.2 软件说明httpd-2.4.2.tar.gzapr-util-1.4.1.tar.gzapr-1.4.6.tar.gzpc ...

  8. ubuntu安装源

    1.编辑sources.list文件 sudo vi /etc/apt/sources.list 添加以下安装源 #台湾源 deb http://tw.archive.ubuntu.com/ubunt ...

  9. 【demo练习二】:WPF依赖属性的练习

    2016-10-11 依赖属性demo小样: 要求:在窗口中点击按钮,利用设置“依赖属性”把Label和TextBox控件里的属性值进行改变. ============================ ...

  10. vue2+element组件库开发

    Vue2:https://cn.vuejs.org/v2/guide/single-file-components.html element组件库:http://element-cn.eleme.io ...