MVC范例
- 格式:doc
- 大小:108.50 KB
- 文档页数:22
.netc#MVC提交表单的4种⽅法⼀,MVC HtmlHelper⽅法1. Html.BeginForm(actionName,controllerName,method,htmlAttributes){}2. BeginRouteForm ⽅法 (HtmlHelper, String, Object, FormMethod)⼆,传统Form表单Aciton属性提交三,Jquery+Ajax 提交表单四,MVC Controller控制器和表单参数传递MVC HtmlHelper⽅法⼀,Html.BeginForm(actionName,controllerName,method,htmlAttributes){}注:所有要提交的内容包括按钮都必须在{ }内参数htmlHelper类型:此⽅法扩展的 HTML 帮助器实例。
actionName类型:操作⽅法的名称。
controllerName类型:控制器的名称。
routeValues类型:⼀个包含路由参数的对象。
通过检查对象的属性,利⽤反射检索参数。
此对象通常是使⽤对象初始值设定项语法创建的。
method类型:⽤于处理窗体的 HTTP ⽅法(GET 或 POST)。
htmlAttributes类型:⼀个对象,其中包含要为该元素设置的 HTML 特性。
返回值类型:<form> 开始标记。
⽤法说明在 Visual Basic 和 C# 中,您可以对类型的任何对象将此⽅法作为实例⽅法调⽤。
在您使⽤实例⽅法语法调⽤此⽅法时,将忽略第⼀个参数Html.BeginForm ⽅法⽰例MVC View代码<h1>在线申请</h1>@using (Html.BeginForm("Apply", "Star", FormMethod.Post, new {@class="MyForm"})){<div class="application_b_3"><table width="820" border="0"><tr><td width="80" height="50">达⼈类型</td><td width="730">@Html.DropDownListFor(m => m.StarModel.TypeID, Model.DropList, new { id = "type", @class = "my-" })</td></tr><tr><td height="50">⾸页达⼈照</td><td><div class="picture_an" id="UploadPhoto" style="width: 142px"><a href="javascript:void(0);" class="btn_addPic"><span><em>+</em>上传照⽚</span><input tabindex="3" title="⽀持jpg、jpeg、gif、png格式,⽂件⼩于5M" size="3" name="pic" id="absFileInput" class="filePrew" type="file" /></a></div></td></tr><tr><td height="50"></td><td>@Html.HiddenFor(m => erGravatar, new { id = "SXtPhoto" })<img src="" id="imgPhoto" height="176px" /></td></tr><tr><td height="100">⾃荐理由</td><td>@Html.TextAreaFor(m => m.StarModel.ApplyReason, new { id = "tDesc" })</td></tr><tr><td height="50"></td><td><a href=" javascript:void(0)" id="btnApplication"><img src="@Url.Content("~/Areas/SNS/Themes/Default/Content/images/ap_9.gif")" alt="" /></a></td></tr></table></div>}⼆,BeginRouteForm ⽅法 (HtmlHelper, String, Object, FormMethod)参数htmlHelper类型:此⽅法扩展的 HTML 帮助程序实例。
★ MVC原理MVC(Mechanical Vapor Compression)蒸发浓缩法,是指利用压缩机的增压升温原理、经特殊流体设计而组成的蒸汽压缩型料液蒸发浓缩工艺系统的简称。
这种工艺系统,使密闭容器内经电加热生成的(从料液或海水)蒸汽,在通过蒸汽压缩机时被压缩增压升温为>104℃的高压气体。
这种增压气体,即可作为再生热源而循环应用于对原水的热传递和连续蒸发(如下工艺流程图所示),又在循环传热过程中使增压气体本身也得以迅速冷却,并最终成为可回用的冷凝水(注:根据冷凝水成分和客户用途经采用有关净化工艺可获得饮用水/软化水/纯水)或得到洁净的浓缩液。
因采用蒸汽压缩机及其特殊流体设计,不仅通过对电加热形成的一次蒸汽实施压缩而增压和升温,而且经多次热循环利用可有效提高浓缩倍数(1/10)和热效率,进而节省大量能源及运行费用(如液体蒸发浓缩处理成本为20-30元/M3,而其它类蒸发浓缩设备为50-200元/M3;如用海水制取1M3淡水,其成本¥20元/M3,其它方式为¥100-320元/M3)。
同时,因工艺系统的一体化、微型化和效能化设计,使处理系统安装容易、移动方便、操作简便。
经电加热及增压气体热交换而水份蒸发后的浓缩液,不仅多次被循环蒸发浓缩,而且在浓缩液排出过程中,还可以与进水热交换进而达到充分利用热能之目的。
总之,这种工艺系统即可获取洁净冷凝水、有价资源(浓缩液),又使料液最终得以高倍数减量。
同时,对原水种类及其污染物浓度的适用范围非常广泛,所以与其它方式的蒸发浓缩工艺相比,在各种重度废水减量处理(或海水淡化)领域更具效率性、节能性和适用性,是低成本清洁生产和根治大流量、高浓度疑难废水、回收有价资源的理想技术选择!★ MVC特点1) 无论是挥发性料液、还是非挥发性料液均适用,故广泛应用于各种行业和高浓度废水根治(海水)场合;2) 无周期性更换部件及药品投入,无需额外消毒装置(100%高温杀菌),因此可减少大量运行费用;3) 无需前后预处理装置、只需调节温度和压力,因此工艺系统相对简化、占地面积小;4) 由耐腐蚀材料制造,可长期耐用、安装在任何地方;5) 仅采用最清洁能源电力即可,因此处理费用最低;6) 可应用于低成本制取饮用水、软化水及纯水;7) 全系统采用PLC控制,所以系统可自动、安全运行;★ MVC适用范围- 海水批量淡化及饮用水、软化水、纯水制取;- 制糖业、制奶业、饮料业、味精业、发酵业、酿酒业、制药业、化工业、造纸业;- 电镀废水、有机废水、冷却废液、炼油废水、制药废水、印染废水、膜浓缩液等大流量、高浓度疑难废水的减量处理与有价资源回收;★ MVC设备生产MVC系列机械蒸汽再压缩型高浓度料液蒸发浓缩设备生产线,已具备150~6500kg/h标准产品的批量生产和供应能力。
MVC架构模式实例⼀、简介 什么是MVC呢?MVC架构模式,也就是Model View Controller模式。
它是⼀种软件设计典范,⽤⼀种业务逻辑、数据、界⾯显⽰分离的⽅法组织代码,将业务逻辑聚集到⼀个部件⾥⾯,在改进和个性化定制界⾯及⽤户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来⽤于映射传统的输⼊、处理和输出功能在⼀个逻辑的图形化⽤户界⾯的结构中。
说起来好像是很复杂,但是我对它的理解也就是各⾃处理⾃⼰的任务。
模型:负责封装并实现应⽤的具体功能。
可以实现系统中的业务逻辑,通常可以⽤JavaBean来实现。
视图:⽤于与⽤户的交互。
⽤来将模型的内容展现给⽤户。
⽤户可以通过视图来请求模型进⾏更新。
视图从模型获得要展⽰的数据,然后⽤⾃⼰的⽅式展⽰给⽤户,相当于提供页⾯来与⽤户进⾏⼈机交互。
⽐如⽤户在登陆注册界⾯完成信息的填报后点击确定,由此来向控制器发出这个请求。
控制器:是Model与View之间沟通的桥梁。
⽤来控制应⽤程序的流程和处理视图所发出的请求。
当控制器接收到⽤户的请求后,会将⽤户的数据和模型相映射,也就是调⽤模型来实现⽤户请求的功能。
然后控制器会选择⽤于响应的视图,把模型更新后的数据展⽰给⽤户。
MVC模式的这三个部分的职责⾮常明确,⽽且相互分离,因此每个部分都可以独⽴地改变⽽不影响其他部分,从⽽⼤⼤提⾼应⽤的灵活性和重⽤性。
⼆、⽬的 使⽤MVC的⽬的是将Model和View实现代码分离,也就是前台html表现层和后台php逻辑层分离。
这样做便于开发,代码优化,界⾯交互性好。
归根结底,其⽬的就是便宜项⽬开发。
三、特点 MVC重要特点就是两种分离:1.视图和数据模型的分离:使⽤不同的视图对相同的数据进⾏展⽰;分离可视和不可视的组件,能够对模型进⾏独⽴测试。
因为分离了可视组件减少了外部依赖利于测试。
(数据库也是⼀种外部组件)2.视图和表现逻辑(Controller)的分离:Controller是⼀个表现逻辑的组件,并⾮⼀个业务逻辑组件。
SpringMVC体系结构和处理请求控制器MVC设计模式 通常的Web项⽬,架构模式基本分层 数据库访问接⼝:DAO层 处理业务逻辑:Service层 数据实体:POJO 负责前端请求的接受处理:Servlet 负责前端页⾯展⽰:JSP MVC设计模式:它是软件⼯程中的⼀种软件架构模式。
它强制性地使软件系统的输⼊、处理和输出分开。
把软件系统分为三个基本部分:模型(Model)、视图(View)、控制器(Controller) 视图(View):负责格式化数据并把他们呈现给⽤户,包括数据展⽰、⽤户交互、数据验证、界⾯设计等功能。
对应组件:JSP或者HTML⽂件 控制器(Controller):负责接收并转发请求,对进⾏处理后指派视图并将响应结果发送给客户端。
对应组件Servlet 模型(Model):模型对象拥有最多的处理任务,是应⽤程序的主体部分,负责数据逻辑(业务规则)的处理和实现数据操作。
对应组件:JavaBean(处理业务逻辑Service层,数据库操作相关的DAO层,贯穿各层之间的数据模型,数据实体POJO) MVC的两种模式 (1)JSP Model1 业务流程较为简单时,可以把控制器的功能交给视图实现。
故Model1模式只有视图和模型,没有控制器(JSP+JavaBean) 浏览器 - 请求 - JSP - JavaBean - 数据库 - JavaBean - JSP -响应 - 浏览器 (2) JSP Model2 相⽐JSPModel1,业务流程复杂时,就需要把业务流程控制交给控制器来实现。
即(JSP+Servlet+JavaBean) 浏览器 - 请求 - Servlet - JavaBean- JSP - 数据库 - JavaBean - JSP -Servlet -响应 - 浏览器 MVC处理过程 MVC的整体结构,对于MVC三个部分(模型、视图、控制器)功能职责分别进⾏了相应的阐述 (1)⾸先视图提供系统与⽤户交互的界⾯,并发送⽤户输⼊给控制器 (2)控制器接收⽤户的请求,并决定应该调⽤哪个模型来进⾏处理 (3)模型根据⽤户请求进⾏相应的业务逻辑处理,并返回处理结果(数据) (4)控制器根据返回的处理结果,调⽤相应的视图格式化模型返回的数据,并通过视图呈现给⽤户结果 MVC优缺点1. 优点1. 多视图共享⼀个模型,⼤⼤提⾼代码的可重⽤性2. MVC三个模块相互独⽴,松耦合架构3. 控制器提⾼了应⽤程序的灵活性和可配置性4. 有利于软件⼯程化管理 通过MVC的设计模式最终可以打造出⼀个松耦合+⾼重⽤性+⾼可适⽤性的架构 2.缺点1. 原理复杂2. 增加了系统结构和实现的复杂性3. 视图对模型数据的低效率访问 MVC来说:并不适合⼩型甚⾄中型规模的项⽬,花费⼤量时间将MVC应⽤到规模并不是很⼤的应⽤程序通常得不偿失Spring MVC介绍及其环境搭建 Spring MVC框架介绍 Spring MVC是Spring框架中⽤于Web应⽤开发的⼀个模块,是Spring提供的⼀个基于MVC设计式的优秀Web开发框架,本质上相当于Servlet。
同Struts 2框架一样,Spring也可以给Web开发者提供一个MVC框架。
虽然Web框架只是Spring的一个模块,但是它却应用的非常广泛。
本章结合实例分析Spring Web框架的使用方法、各个组件的作用通过本章的学习,相信读者会对如何使用Spring进行MVC开发有很深入的了解。
第一个Spring MVC例子【示例】该示例先讲解如何在Eclipse环境下实现Spring MVC框架,然后讲解如何在Ant环境下实现。
在Eclipse中创建一个工程SpringMVC,然后按照下面的步骤添加文件。
1配置web.xml文件在Spring MVC的WEB-INF目录下创建web.xml。
在使用Struts 2时,需要在web.xml文件配置FilterDispatcher,在使用Spring的MVC框架时,也需要配置web.xml文件,代码如下。
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"><!--配置Sring MVC的核心控制器DispatcherServlet --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><!--为DispatcherServlet建立映射--><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping></web-app>上面的代码对DispatcherServlet类进行配置,所有后缀名为.do的请求都会被DispatcherServlet处理。
Spring3 MVC - 3到Spring MVC框架简介Spring3 MVC框架简介Spring MVC是Spring的框架的Web组件。
它提供了丰富的功能,为建设强大的Web应用程序。
Spring MVC框架的架构,并在这样的高度可配置的方式,每一块的逻辑和功能设计。
此外Spring可以毫不费力地与其他流行的Web框架,如Struts,WebWork的,的Java Server Faces和Tapestry集成。
这意味着,你甚至可以告诉Spring使用Web框架中的任何一个。
比Spring更不紧耦合的servlet或JSP 向客户端呈现视图。
喜欢速度与其他视图技术集成,Freemarker的,Excel或PDF现在也有可能。
Spring3.0 MVC系列∙第1部分:到Spring 3.0 MVC框架简介∙第2部分:在Spring 3.0 MVC创建Hello World应用程序∙第3部分:在Spring 3.0 MVC的形式处理∙第4部分:Spring3 MVC的Tiles Support与Eclipse中的例子插件教程∙第5部分:Spring3 MVC的国际化及本地化教程与范例在Eclipse∙第6部分:Spring3 MVC示例教程Spring主题∙第7部分:创建Spring3 MVC Hibernate 3的示例在Eclipse中使用Maven的在Spring Web MVC,你可以使用任何对象作为命令或表单支持对象,你不需要实现框架特定的接口或基类。
Spring的数据绑定是高度灵活的:例如,将验证错误类型不作为应用系统错误,可以通过评估的不匹配。
因此,你不必重复你的业务对象的属性,简单的无类型的字符串,在表单对象仅仅是为了处理无效的意见,或正确转换的字符串。
相反,它往往是最好直接绑定到业务对象。
请求处理生命周期Spring的Web MVC框架是,像许多其他Web MVC框架,要求为导向,围绕一个中心的servlet,它把请求分派给控制器,提供其他功能,有利于开发Web应用而设计的。
本文主要介绍使用注解方式配置的spring mvc,包括数据访问层的实现web.xml配置:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="http:// /xml/ns/javaee" xmlns:web="/xml/ns/javaee/web-ap p_2_5.xsd" xsi:schemaLocation="/xml/ns/javaee http://java.su /xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>s3h3</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</l istener-class></listener><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servle t-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name> <!-- 这里在配成spring,下边也要写一个名为spring-servlet.xml的文件,主要用来配置它的controller --><url-pattern>*.do</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>spring-servlet,主要配置controller的信息<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="http:// /schema/p"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans http://www. /schema/beans/spring-beans-3.0.xsd/schema/aop http://www.springframework.o rg/schema/aop/spring-aop-3.0.xsd/schema/tx http://www.springframework.or g/schema/tx/spring-tx-3.0.xsd/schema/context http://www.springframewo /schema/context/spring-context-3.0.xsd"><context:annotation-config /><!-- 把标记了@Controller注解的类转换为bean --><context:component-scan base-package="com.mvc.controller"/> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationM ethodHandlerAdapter"/><!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --><bean class="org.springframework.web.servlet.view.InternalResourceView Resolver"p:prefix="/WEB-INF/view/" p:suffix=".jsp"/><bean id="multipartResolver"class="monsMultipartRe solver"p:defaultEncoding="utf-8"/></beans>applicationContext.xml代码<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:aop="/schema/aop" xmlns:context="http:// /schema/context"xmlns:p="/schema/p" xmlns:tx="http://www.sprin /schema/tx"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans http://www.springframewo /schema/beans/spring-beans-3.0.xsd/schema/context http://www.springframework.o rg/schema/context/spring-context-3.0.xsd/schema/aop /s chema/aop/spring-aop-3.0.xsd/schema/tx /sc hema/tx/spring-tx-3.0.xsd"><context:annotation-config /><context:component-scan base-package="com.mvc"/><!-- 自动扫描所有注解该路径 --><context:property-placeholder location="classpath:/hibernate.properties "/><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFacto ryBean"><property name="dataSource" ref="dataSource"/><property name="hibernateProperties"><props><prop key="hibernate.dialect">${dataSource.dialect}</prop><prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto}</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><property name="packagesToScan"><list><value>com.mvc.entity</value><!-- 扫描实体类,也就是平时所说的model --></list></property></bean><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/><property name="dataSource" ref="dataSource"/></bean><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${dataSource.driverClassName} "/><property name="url" value="${dataSource.url}"/><property name="username" value="${ername}"/><property name="password" value="${dataSource.password}"/></bean><!-- Dao的实现 --><bean id="entityDao" class="com.mvc.dao.EntityDaoImpl"><property name="sessionFactory" ref="sessionFactory"/></bean><tx:annotation-driven transaction-manager="transactionManager"/><tx:annotation-driven mode="aspectj"/><aop:aspectj-autoproxy/></beans>hibernate.properties数据库连接配置dataSource.password=123ername=rootdataSource.databaseName=testdataSource.driverClassName=com.mysql.jdbc.DriverdataSource.dialect=org.hibernate.dialect.MySQL5DialectdataSource.serverName=localhost:3306dataSource.url=jdbc:mysql://localhost:3306/testdataSource.properties=user=${ername};databaseName=${dataSource.d atabaseName};serverName=${dataSource.serverName};password=${dataSource.passwor d}dataSource.hbm2ddl.auto=update配置已经完成,下面开始例子先在数据库建表,例子用的是mysql数据库CREATE TABLE `test`.`student` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL,`psw` varchar(45) NOT NULL,PRIMARY KEY (`id`))建好表后,生成实体类package com.mvc.entity;import java.io.Serializable;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name = "student")public class Student implements Serializable {private static final long serialVersionUID = 1L;@Id@Basic(optional = false)@GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false)private Integer id;@Column(name = "name")private String user;@Column(name = "psw")private String psw;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUser() {return user;}public void setUser(String user) {er = user;}public String getPsw() {return psw;}public void setPsw(String psw) {this.psw = psw;}}Dao层实现package com.mvc.dao;import java.util.List;public interface EntityDao {public List<Object> createQuery(final String queryString);public Object save(final Object model);public void update(final Object model);public void delete(final Object model);}package com.mvc.dao;import java.util.List;import org.hibernate.Query;import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class EntityDaoImpl extends HibernateDaoSupport implements EntityDao {public List<Object> createQuery(final String queryString) { return (List<Object>) getHibernateTemplate().execute(new HibernateCallback<Object>() {public Object doInHibernate(org.hibernate.Session sessio n)throws org.hibernate.HibernateException {Query query = session.createQuery(queryString);List<Object> rows = query.list();return rows;}});}public Object save(final Object model) {return getHibernateTemplate().execute(new HibernateCallback<Object>() {public Object doInHibernate(org.hibernate.Session sessio n)throws org.hibernate.HibernateException {session.save(model);return null;}});}public void update(final Object model) {getHibernateTemplate().execute(new HibernateCallback<Object>() { public Object doInHibernate(org.hibernate.Session session)throws org.hibernate.HibernateException {session.update(model);return null;}});}public void delete(final Object model) {getHibernateTemplate().execute(new HibernateCallback<Object>() { public Object doInHibernate(org.hibernate.Session session)throws org.hibernate.HibernateException {session.delete(model);return null;}});}}Dao在applicationContext.xml注入<bean id="entityDao" class="com.mvc.dao.EntityDaoImpl"><property name="sessionFactory" ref="sessionFactory"/></bean>Dao只有一个类的实现,直接供其它service层调用,如果你想更换为其它的Dao实现,也只需修改这里的配置就行了。
分页查询案例——前台页⾯(Index.aspx)<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Shite.Master" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.PagedList<HouseSys.Models.HouseModel> >" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">⾸页</asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"><DIV id=navbar class=wrap><DL class="search clearfix"><FORM id=sform method=post action=search.action><DT><UL><LI class=bold>房屋信息</LI><LI>标题:<INPUT class=text type=text name=title> <LABEL class=ui-blue><INPUT onclick=doSearch() value=搜索房屋 type=button name=search></LABEL></LI></UL></DT><DD><UL><LI class=first>价格 </LI><LI><SELECT name=price> <OPTION selected value="">不限</OPTION> <OPTIONvalue=0-100>100元以下</OPTION> <OPTION value=100-200>100元—200元</OPTION><OPTION value=200-1000000>200元以上</OPTION></SELECT> </LI></UL></DD><DD><UL><LI class=first>房屋位置</LI><LI><%--《SELECT id=street name=street_id> <OPTION selectedvalue="">不限</OPTION> <OPTION value=1000>知春路</OPTION> <OPTIONvalue=1001>中关村⼤街</OPTION> <OPTION value=1002>学院路</OPTION> <OPTIONvalue=1003>朝阳路</OPTION></SELECT> --%><%=Html.DropDownList("street",(SelectList)ViewData["selectStree"],"不限")%></LI></UL></DD><DD><UL><LI class=first>房型</LI><LI><%-- <SELECT name=type_id> <OPTION selected value="">不限</OPTION> <OPTIONvalue=1000>⼀室⼀厅</OPTION> <OPTION value=1001>⼀室两厅</OPTION> <OPTIONvalue=1002>两室⼀厅</OPTION> <OPTION value=1003>两室两厅</OPTION></SELECT> --%><%=Html.DropDownList("type",(SelectList)ViewData["selectType"],"不限")%></LI></UL></DD><DD><UL><LI class=first>⾯积 </LI><LI><SELECT name=floorage> <OPTION selected value="">不限</OPTION> <OPTIONvalue=0-40>40以下</OPTION> <OPTION value=40-500>40-500</OPTION> <OPTIONvalue=500-1000000>500以上</OPTION></SELECT> </LI></UL></DD><LABEL class="ui-green searchs"><a href="fabu.htm" title="">查询</a></LABEL></FORM></DL></DIV><DIV class="main wrap"><TABLE class=house-list><TBODY><%foreach(var house in Model){%><TR><TD class=house-thumb><span><A href="details.htm" target="_blank"><img src="../images/thumb_house.gif" width="100" height="75" alt=""></a></span></TD><TD><DL><DT><A href="details.htm" target="_blank"><%=house.Title %></A></DT><DD><%= %><BR>联系⽅式:<%=house.Contract %></DD></DL></TD><TD class=house-type><%= %></TD><TD class=house-price><SPAN><%=house.Price %></SPAN>元/⽉</TD></TR><%}%></TBODY></TABLE><DIV class=pager><%=Html.Pager<HouseSys.Models.HouseModel>(Model) %></DIV></asp:Content>。
在探讨servlet实现mvc的乘法口诀表之前,首先需要了解什么是servlet和mvc。
Servlet是Java编程语言的一种类,用于增强网络服务器功能。
它的主要功能是在服务器端接收来自客户端的请求,生成响应并将其发送回客户端。
而MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。
模型负责处理应用程序的数据逻辑,视图负责显示数据给用户,控制器负责从视图接收输入并根据输入修改模型。
现在让我们来看看如何使用servlet实现mvc的乘法口诀表。
我们可以将乘法口诀表的数据视为模型,因为它包含了乘法运算的逻辑。
我们可以创建一个视图,用于呈现乘法口诀表的内容给用户。
我们需要一个控制器来接收用户的输入,并根据输入来更新模型和呈现新的视图。
在实现过程中,我们可以通过servlet来处理用户的请求和生成响应。
当用户访问乘法口诀表页面时,servlet可以从模型中获取数据,并将数据传递给视图进行呈现。
当用户输入修改乘法口诀表时,servlet可以接收输入并更新模型,然后生成新的视图呈现给用户。
通过以上实现方式,我们可以看到servlet实现了mvc的乘法口诀表,将数据逻辑、呈现和用户输入处理分离开来,使得代码更易于维护和扩展。
我个人认为使用servlet实现mvc的乘法口诀表还有以下几点优点:1. 可扩展性强:通过mvc的架构,可以方便地添加新的功能和修改现有功能,而不会影响其他部分的代码。
2. 代码可读性好:mvc将数据和视图分离,使得代码更加清晰易懂,便于团队合作和维护。
3. 分工明确:模型、视图和控制器各司其职,开发人员可以根据自己的特长和兴趣进行开发,提高工作效率。
通过servlet实现mvc的乘法口诀表,不仅可以让我们更好地理解和掌握servlet和mvc的使用,也能为我们带来更好的开发体验和项目效果。
Model-View-Controller 範例作者:蔡煥麟日期:Feb-4-2003更新:Feb-4-20031.0 簡介這份文件包含了三個MVC 範例,第一個範例是基於上一篇文章〔JSP、Servlet 與JavaBean 的組合應用〕的基本架構,第二和第三個範例則是逐漸改良的版本。
基本上,如果你已經了解上一篇文章的程式架構,這三個範例應該都很容易了解,所以這裡只會針對增加或改良的部分加以說明。
2.0 範例一2.1 簡介此範例以MVC 架構實作了使用者登入和登出的功能。
2.2 檔案目錄結構classes 存放編譯過的java class|+--com|+--huanlinsrc 存放所有原始碼檔案,包括.java, .jsp, web.xml...等|+--Make.bat 用來編譯所有的java 程式+--ControllerServlet.java 作為控制中心的servlet+--UserInfoBean 用來儲存使用者資訊的JavaBean+--Login.jsp 登入畫面+--Welcome.jsp 登入成功後的歡迎畫面2.3 程式說明在解讀這個範例程式時,最重要的,也是首先應該了解的,就是作為流程控制中心的ControllerServlet 類別,它改寫了HttpServlet 類別的service() 方法,接收前端瀏覽器傳來的請求,處理之後傳回適當的HTML 或JSP 網頁。
其過程如下:1.取得前端HTML 表單設定的'action' 參數值。
2.判斷目前這個session 的使用者是否已經登入,若否,則先進行身分驗證;若已登入,則根據'action' 參數值判斷應將使用者導向到哪個網頁。
參考下列程式碼:public class ControllerServlet extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 下面兩行讓中文字能正確顯示response.setContentType("text/html; charset=big5");request.setCharacterEncoding("big5");String action = request.getParameter("action"); // 取得目前使用者要執行的動作// 若使用者身分尚未驗證,且目前的"動作"不是要進行驗證,就切到登入畫面if (!isAuthenticated(request) && !("authenticate".equals(action))) {doLogin(request, response);return;}if ("authenticate".equals(action)) {doAuthenticate(request, response); // 執行身分驗證}else if ("logout".equals(action)) {doLogout(request, response); // 執行登出}else {response.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);}}// 轉往指定的網址private void gotoPage(String targetURL, HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException {RequestDispatcher rd;rd = getServletContext().getRequestDispatcher("/" + targetURL);rd.forward(request, response);}// 傳回目前的使用者是否已經通過身分驗證(是否已登入)// 只要檢查userInfo 物件是否存在就能得知是否已登入private boolean isAuthenticated(HttpServletRequest request) { boolean result = false;HttpSession session = request.getSession();if (session.getAttribute("userInfo") != null)result = true;return result;}// 轉往登入畫面private void doLogin(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException {gotoPage("Login.jsp", request, response);}// 登出private void doLogout(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException {HttpSession session = request.getSession();session.removeAttribute("userInfo"); // 把身分驗證旗號清掉session.invalidate(); // 清除session 內所有attributes 與物件的繫結關係doLogin(request, response); // 再轉往登入畫面}// 執行身分驗證private void doAuthenticate(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException {String userName = request.getParameter("username");String password = request.getParameter("password");String targetURL;// 若身分驗證無誤,就建立userInfo 物件,並指定一個attribute 與之繫結if ("123".equals(password)) {HttpSession session = request.getSession();UserInfoBean bean = new UserInfoBean();bean.setUserName(userName);bean.setPassword(password);session.setAttribute("userInfo", bean);targetURL = "/Welcome.jsp";}else { // 驗證失敗targetURL = "/LoginError.jsp";}gotoPage(targetURL, request, response);}}提示:1.注意if ("123".equals(password)) 和if(password.equals("123") 兩種寫法在防錯能力上的差異。
2.使用RequestDispatcher.forward() 轉送網頁時,網址前面要加斜線'/'。
3.前端的'action' 參數定義,請參考Login.jsp 和Welcome.jsp。
2.4 編譯執行make.bat。
2.5 佈署與執行(for Tomcat)1.在Tomcat 的webapps 目錄下建一個名為mvc1 的目錄。
2.複製web.xml 至mvc1\WEB-INF\ 目錄下。
3.將所有 .jsp 檔案複製到mvc1\ 目錄下。
4.將整個classes 目錄複製到mvc1\WEB-INF\ 目錄下。
5.重新啟動Tomcat(只有第一次佈署時需要),在瀏覽器的網址列輸入"http://127.0.0.1:8080/mvc1/main"。
參考以下執行畫面:3.0 範例二3.1 簡介此版本改良自MVC1,改變如下:∙以Ant 來簡化編譯和佈署。
∙原始碼的目錄結構區分得更清楚。
∙將ControllerServlet 類別中,處理action 參數與相對應的動作抽離成一個框架,將固定不變的留下來,經常會變動的部分移出去。
也就是把action 定義成抽象類別,實際的具像類別由個別的類別單獨實作,並且將action 參數與相對應的action 具像類別定義在一個外部的屬性檔裡面。
這個屬性檔就是action.properties。
3.2 檔案目錄結構cfg 存放應用程式組態檔classes 存放編譯過的java class|+--com|+--huanlin|+--action+--servlet+--utility+--valuebeanjsp 存放.jsp 檔案|+--Login.jsp 登入畫面+--LoginError.jsp 登入失敗畫面+--Welcome.jsp 登入成功後的歡迎畫面src 存放java 原始碼檔案|+--action.properties 定義action 與其對應的類別+--com|+--huanlin|+--action 處理HTTP request 的Action 具像類別|+--AuthenticationAction.java 驗證使用者身分+--EmployeeAction.java 員工資料維護作業+--LogoutAction.java 登出+--servlet|+--ControllerServlet.java 作為控制中心的servlet+--utility|+--Action Action 物件的抽象類別+--valuebean|+-- UserInfoBean 用來儲存使用者資訊的JavaBeanAction 族系的類別階層ng.Object|+--com.huanlin.utility.Action|+--com.huanlin.action.AuthenticationAction+--com.huanlin.action.EmployeeAction+--com.huanlin.action.LogoutAction其他類別ng.Object|+--com.huanlin.servlet.ControllerServlet+--com.huanlin.valuebean.EmployeeBean+--com.huanlin.valuebean.UeerInfoBean3.3 程式說明ControllerServlet 類別中,已經不像範例一裡面,使用許多if 敘述來判斷要執行哪個action。