关于web模型:

早期的web 应用主要是静态页丽的浏览〈如新闻的制监),随着Internet的发展,web应用也变得越来越复杂,不仅要 和数据库进行交互 ,还要和用户进行交互,由此衍生了各种服务器端页面编写技术

目前应用的较多的三种服务端页面编写技术的ASP,JSP和PHP;

JSP 通过在 HTML Jî面文件中嵌入 Java 脚本代码,从而实现动事同页功能 HTML ,

标签负责页面的布局和显示外观, Java 代码负责提取动态数据,实现业务逻辑 对于简单

的应用,果用这种方式可以筒化开盘难度,加快开监进度,然而,对于 些较大的应用,

大量的 HTML Java 代码的混如导致了页面的显示逻辑和业务逻 交错在 起,使得代

码的可读性变壁,维护难度增为n. 不利子于HTML 蝙辑人员和 Java 开宜人虽的分工协作.

为了分离页面的理现逻辑和业务逻辑,使程序各部分的职责更加清晰,精强,增强代码的可

维护性, SUN 公司在 JSP 的早期规商中制定了两种 SP 开监模型,分别为模型 ( Model1 )
和模型 ( Model2 ).

1  模型一:

使用 SP+ avaB eans 技术将页面显示和业务逻辑处理分开 JSP 实现页面的显
示, JavaB国 .x1且用来最载盘掘和实现业务逻辑 模型 的结构如图 所示

JSP 页面组自响应请求井将处理结果并返回客户 ,所有的数据通过
JavaBean 来处理, JSP 实现页面的显示.

模型 1不能满足大型应用的需要,但是用于小型应用,由于该模型简单 且不涉及过
多的要素 可以很好地满足小型应用的需要 所以在简单应用中,应由优先考虑模型1

2 模型 二和MVC:

在模型1中,JSP页面嵌入了流程控制代码和部分的逻辑处理代码,我们可以将这部分代码提取出来,

放到一个单独的角色中,这个角色就是控制器角色,而这样的Web架构就是模型2了。

模型2符合MVC架构模式,MVC即模型-视图-控制器(Model-View-Controller)。

MVC架构的工作原理:

MVC架构有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。MVC架构提供了一种按功能对各种对象进行分割的方法(这些对象是用来维护和表现数据的),其目的是为了将各对象间的耦合程度降至最低。

在MVC架构中,一个应用被分成三个部分,模型(Model)、视图(View)和控制器(Controller)。

  模型代表应用程序的数据以及用于访问控制和修改这些数据的业务规则。当模型发生改变时,它会通知视图,并为视图提供查询模型相关状态的能力。同时,它也为控制器提供访问封装在模型内部的应用程序功能的能力。

  视图用来组织模型的内容。它从模型那里获得数据并指定这些数据如何表现。当模型变化时,视图负责维护数据表现的一致性。视图同时将用户的请求通知控制器。

  控制器定义了应用程序的行为。它负责对来自视图的用户请求进行解释,并把这些请求映射成相应的行为,这些行为由模型负责实现。在独立运行的GUI客户端,用户的请求可能是一些鼠标单击或是菜单选择操作。在一个Web应用程序中,

它们的表现形式可能是一些来自客户端的GET或POST的HTTP请求。模型所实现的行为包括处理业务和修改模型的状态。根据用户请求和模型行为的结果,控制器选择一个视图作为对用户请求的响应。图20-2描述了在MVC应用程序中模型、视

图、控制器三部分的关系。

在模型2中,控制器的角色由Servlet来实现,视图的角色由JSP页面来实现,模型的角色由JavaBeans来实现。模型2的架构如图20-3所示。

Servlet充当控制器的角色,它接受请求,负责实例化JavaBean对象对业务逻辑进行处理,并为JSP页面准备承载了数据的JavaBean对象,

接着将请求分发给适当的JSP页面来产生响应。JSP视图可以使用el表达式或者ognl

来得到JavaBean中的数据,呈现给用户。

作为模型的JavaBean主要有两类:一类用于封装业务逻辑,一类用于承载数据。

web 框架的诞生

基于MVC 架构模式开发的 应用程序 容易出现多个 控制器,在编写控制器时,

对于页面导航的处理也会比较复杂。 通过对基于 MVC架构的web应用程序进行分析,可

以发现一 些实现上的相同之处和不同之处 相同之处就是 MVC 架构的调用流程

(1)所有的请求直接访问控制器,由控制器时请求进行分发.

(2)控制器实例化java bean对象,由javabean对象处理业务并负责数据的承载

(3 控制器根据请求处理的结果,向用户呈现相应的视图

不同之处是:

(1)用户请求 URL 的不同时应了不同的处理单元:

2) 不同表单提交的数据需要不同的 JavaBean 来保存数据;

(3)请求结果的不同导致控制器向用户呈现视图的不同;

Struts1 :

缺点:单元测试困难和令人头疼的ActionForm

其他web框架,xwork ,xwork设计思想先进,Struts市场占有率高,于是两个开发团队决定合并开发,并命名struts2.

struts2入门:

导入 jar文件

配置 web.xml 将请求交给struts2处理

<!--配置struts过滤器  核心控制器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern> <!-- 拦截所有的请求定位到指定的struts2过滤器 放到StrutsPrepareAndExecuteFilter -->
</filter-mapping> 然后struts2根究请求转到不同的action,然后action根据页面请求进行逻辑判断,然后返回指定的页面
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="userAction" class="action.loginAction">
<result name="success" type="">/welcome.jsp</result>
</action>
</package>
</struts>

package action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
import entity.UserInfo;
import org.apache.struts2.ServletActionContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map; /**
* Created by zhangyu on 2017/10/22.
*/
public class loginAction implements Action { private UserInfo userInfo; public String execute() throws Exception { //解耦合方式
Map<String, Object> session1 = ActionContext.getContext().getSession();
session1.put("username","张三"); //耦合的方式
HttpSession session= ServletActionContext.getRequest().getSession();
session.setAttribute("uname","李四"); //将上下文中的数据放入值栈中 就是将session里的或者request里的 东西压入值栈 //值栈中的数据在前台获取可以直接<s:property value="username"></s:property> 非值栈数据需要向上下文中索取<s:property value="#session.username"></s:property>
ValueStack valueStack = ActionContext.getContext().getValueStack();
valueStack.push(session1);
valueStack.push(session); return SUCCESS;
} public UserInfo getUserInfo() {
return userInfo;
} public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
}

  

ok

---web模型 --mvc和模型--struts2 入门的更多相关文章

  1. 【转】前端Web开发MVC模式-入门示例

    前端Web开发MVC模式-入门示例 MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:cont ...

  2. [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作

    [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...

  3. 简单讲解MVC(视图/模型/控制器)

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...

  4. ASP.NET MVC编程——模型

    1 ViewModel 是一种专门提供给View使用的模型,使用ViewModel的理由是实体或领域模型所包含的属性比View使用的多或少,这种情况下实体或领域模型不适合View使用. 2模型绑定 默 ...

  5. MVC编程模型

    MVC 编程模型 MVC 是三个 ASP.NET 开发模型之一. MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计: Model(模型 ...

  6. asp.net MVC 自定义模型绑定 从客户端中检测到有潜在危险的 Request.QueryString 值

    asp.net mvc 自定义模型绑定 有潜在的Requset.Form 自定义了一个模型绑定器.前端会传过来一些敏感字符.调用bindContext. valueProvider.GetValue( ...

  7. 三层架构介绍和MVC设计模型介绍

    springmvc是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层 进行职责解耦,基于请 ...

  8. ASP.NET MVC数组模型绑定

    在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type="text" name ...

  9. MVC(Model(模型) View(视图) Controller(控制器))

    复习 1.      商品表 增删改查 index.php  add.php   view.php   edit.php   action.php 2.      MVC(Model(模型)  Vie ...

随机推荐

  1. mongoose和mongodb的几篇文章 (ObjectId,ref)

    http://mongoosejs.com/docs/populate.html http://stackoverflow.com/questions/6578178/node-js-mongoose ...

  2. Excel VBA宏 链接服务器 上传和下载数据

    首先说明以下. 第一: 下面的 “ _" 也就是 空格下划线 在VBA中表示换行的意思:& 表示链接连个字符串的操作,注意 & 的前后是否需要空格 第二: 如果链接服务器,服 ...

  3. Performance — 前端性能监控利器

    Performance是一个做前端性能监控离不开的API,最好在页面完全加载完成之后再使用,因为很多值必须在页面完全加载之后才能得到.最简单的办法是在window.onload事件中读取各种数据. 大 ...

  4. Scrum立会报告+燃尽图(十二月六日总第三十七次):程序功能逻辑优化

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  5. Daily Scrumming* 2015.11.1(Day 13)

    一.今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 实现API小的更改 实现前后端整合 杨墨犁 实现首页 修改首页 付帅 实现创建编辑登录登出 测试修改 ...

  6. android实战开发02

    正如我之前提到的,我想的是网页来进行测试发布是有较大难度的,但是我高兴的看到我的好友limary已经熬出头了,之后我会关注他的进度的,感谢他给我的鼓励和启发.现在我要讲讲我的天才运算器V2.0版. 在 ...

  7. asp.net登录验证FormsAuthenticationTicket和FormsAuthentication类

    登录部分使用的类 FormsAuthentication   为 Web 应用程序管理 Forms 身份验证服务. 配置启用身份验证,WEB.config配置: <system.web> ...

  8. ubuntu安装php-curl拓展

    首先输入apt-cache search curl | grep php查询curl的php支持名字可能会返回如下内容:php5-curl - CURL module for php5安装:sudo ...

  9. 福州大学软工1816 K 班助教总结

    春节时期总有各种诱惑因素(例如路人超能第二季),拖到现在才发布十分抱歉orz. 一.感谢 首先对柯老师和软工助教指导团队这一学期以来的支持和指导表示感谢.第一次做助教,有时候会提出一些不大成熟的想法, ...

  10. 小学四则运算结对项目报告(GUI)

    小学四则运算结对项目报告(GUI) 一.Coding.Net项目地址: https://git.coding.net/wsshr/Calculation.git 二.PSP表格(完成前): PSP 任 ...