1.MVC模式
    - Model-View-Controller
    - 模型-视图-控制器
    - Model(模型)
        > 模型分为业务模型,和数据模型
        > 模型负责处理业务逻辑以及和数据库进行交互
        > Service和DAO
 
    - View(视图)
        > 视图用来渲染模型,将模型以页面的形式展现给用户
        > JSP
 
    - Controller(控制器)
        > 负责接收请求,调用模型处理请求,然后选择视图渲染模型
        > Servlet
 
三层架构   
    表示层
        JSP+Servlet
 
    业务逻辑层
        Service
 
    持久化层
        DAO
 
MVC和三层架构都是为了软件的层与层之间的解耦,其实我们日常开发的项目的实际上是综合了三层架构和MVC两种形式。
 

表示层:
    HTML擅长显示一个静态的网页,HTML并不能运行Java程序
 
    Servlet擅长调用Java程序,但是不擅长显示一个网页
 
    HTML+Servlet=JSP
 
1.JSP
    [1] 简介
        > Java Server Pages
        > Java的服务器页面
        > JSP是需要运行在服务器中,不能脱离服务器运行
        > JSP的本质就是一个Servlet
        > JSP就是一个披着HTML皮的Servlet
 
    [2] 运行原理
        > 我们在访问JSP时,服务器会先将JSP翻译为一个Servlet,然后再去调用Servlet去处理请求
        > jsp文件 --翻译--> java文件 --编译--> class
        > 服务器翻译过的java文件,和编译好的class文件都会放到Tomcat服务器的work目录下
        > 被服务器翻译生成java文件,该类已经继承HttpJspBase
            而HttpJspBase又继承HttpServlet。
          而在总的web.xml文件中又发现JSP对应Servlet的配置信息
            由此证明,JSP就是一个Servlet。
 
    [3] 基本语法
        > 模板元素   
            - 模板元素就是JSP中HTML代码
            - 模板元素中的内容会作为out.write()的参数输出到页面中来
            - 所以我们可以像编写一个HTML网页一样,在JSP中编写HTML代码
 
        > 脚本片段   
            - <% %>
            - 在脚本片段可以直接编写Java代码
            - 脚本片段中内容会原封不动的复制到JSP对应Java文件的的service方法中的指定位置
            - 所以在service()方法中可以写什么,在脚本片段中就可以写什么
            - 在JSP页面中可以编写多个脚本片段,但是多个脚本片段之间要保证结构完整
 
        > 表达式
            - <%= %>
            - 表达式可以用来将一个对象输出到页面中
            - 表达式中的内容,会作为out.print()的参数,最终输出到页面
            - 所以out.print()可以接收什么参数,则表达式中就可以些什么
            - 而该方法可以接收Object类型的参数,所以表达式可以传递任意的Java对象
 
        > 注释
            - <%-- --%>
            - JSP注释中的内容将不会被翻译到java文件中,只能在jsp页面中看见
            - JSP中一共可以使用三种注释:
                1.jsp注释 <%-- --%>
                2.HTML注释 <!-- -->
                3.Java注释 // /**/ java注释只能在脚本片段写
 
        > 声明
            - <%! %>
            - JSP声明中的内容将会被写入到JSP对应的java类中
            - 所以在类中可以写什么,在声明中就可以写什么
            - 但是这个没什么用
 
    [4] JSP指令
        > JSP指令用来告诉JSP引擎,如何来翻译我们的JSP文件
        > JSP指令一共有三个:page include taglib
 
        > 格式:<%@ 指令名 属性名1=”属性值1” 属性名2=”属性值2”  %>
            - page指令
                - import:用来导包的
                - errorPage:当页面出现异常时转发到的页面
                - isErrorPage:当前页面是否是一个错误页面,需要一个布尔值,默认是false
                    如果设置为true,则可以在页面中使用exception对象
                - isELIgnored:是否忽略EL表达式,需要布尔值,默认值是false,不忽略,一般不动
                - session:页面中是否可以直接使用session对象,需要一个布尔值,默认值为true,可以使用。一般不动
                - contentType:设置响应内容及编码,实际上就是设置Content-Type这个响应头的
                - pageEncoding:当前JSP页面使用的编码,jsp引擎需要根据该编码去解析JSP文件
 
                - language:jsp将被翻译成的语言,默认值是java,可选值java
                - extends:指定jsp翻译为java文件要继承的父类
                - info:设置JSP的信息
 
            - include指令
                - <%@ include file="/include/2.jsp" %>
                - include指令用来将一个页面包含进另一个页面
                - include指令是静态包含,使用该指令相当于将另一个页面,
                    原封不动的复制到当前页面的指定位置
                - 使用静态包含,只会翻译当前页面,而不会翻译被包含页面
 
    [5] JSP动作标签
        > 格式:<jsp:标签名 属性名="属性值"></jsp:标签名>
        - 原理:
            JSP动作标签,最终在java文件中,都会被转换成java代码
            - 标签就是以标签的形式,去调用Java代码
        -     <jsp:forward page="/index.jsp">
                <jsp:param value="zhubajie" name="username"/>
            </jsp:forward>
            用来做请求的转发,我们还可以通过forward标签内部使用param标签,为转发附加请求参数
 
        -     <jsp:include page="/include2/2.jsp"></jsp:include>   
            作用:将一个页面包含进另一个页面
                    jsp:include和include指令不同,include指令是静态包含,而jsp:include是动态包含
                  它会同时将当前页面和被包含页面都翻译为java文件
                    它是通过这行代码来包含另一个页面:
                    org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/include2/2.jsp", out, false);
 
    [6] 隐含对象
        > 隐含对象指的是可以直接在JSP中使用的对象
        > JSP中一共有九大隐含对象,这九个对象都可以在JSP中直接使用
        > 在JSP对应的Servlet中以及对这个九个变量进行声明并赋值
        > 九个隐含对象中有四个是域对象
        > 九大隐含对象有:
            1.pageContext
                类型:PageContext
                作用:通过pageContext可以获取到页面中的其他隐含对象
 
            2.request
                类型:HttpServletRequest
 
            3.session
                类型:HttpSession
 
            4.application
                类型:ServletContext
 
            5.response
                类型:HttpServletResponse
                作用:代表服务器发送给浏览器的响应报文
                        和Servlet中的response一样,但是在JSP中这个对象不太常用
 
            6.out
                类型:JspWriter
                作用:通过out对象向浏览器输出一个内容
 
 
            7.config
                类型:ServletConfig
                作用:代表当前JSP的配置信息,基本不用
 
            8.page
                类型:Object
                作用:在JSP对应的Java文件中有这么一行代码:Object page = this;
                        page代表的当前对象,不咋用
 
            9.exception
                类型:Throwable
                作用:代表页面中的异常信息,可以通过该对象获取到页面中的异常
 
    [7] 域对象
        > 域指区域,地区,范围,在WEB项目中同样也存在很多不同的区域:
            不同的JSP页面、不同Servlet。总之,不同的WEB资源就是一个一个不同的区域。
        > 域对象的主要作用就是在不同的WEB资源之间共享数据。
        > JavaWeb中一共有四个域对象pageContext、request、session、application
        > 在JSP中可以获取到全部四个域对象,而在Servlet中只能获取三个,获取不到pageContext
        > 所有的域对象的内部,都维护着一个Map,这个Map用来保存属性
        > 域对象共有的3个方法:
            void setAttribute(String name , Object value) --> 以指定的属性名在域对象中保存一个属性
            Object getAttribute(String name) --> 根据属性名从域中获取一个属性值
            void removeAttribute(String name) --> 从域中移除一个指定的属性
 
            - pageContext
                - 类型:PageContext
                - 作用:当前页面
                        代表page域的域对象,作用范围就是当前页面
                            一旦切换页面,则域中的属性全部丢失
                                该域对象主要在标签中使用
 
            - request
                - 类型:HttpServletRequest
                - 作用:当前请求
                        代表的是request域的域对象,作用范围时当前请求
                            一旦发送多个请求,则域中的属性会全部丢失
                                注意:request域中的属性在转发时有效
                                    重定向时request域中属性会全部丢失
 
            - session
                - 类型:HttpSession
                - 作用:当前会话,会话指一次打开浏览器到关闭浏览器的过程
                        代表的是session域的域对象,一旦结束会话(关闭浏览器),
                            则session域中属性全部丢失
 
            - application
                - 类型:ServletContext
                - 作用:当前应用,只要服务器不停application中的属性一直都在
                        application域
 
    [7] JSP和Servlet的分工:
        > JSP本质就是一个Servlet,所以Servlet能干的事JSP全行。
        > 所以有一段时间人们已经将Servlet完全抛弃了,
            于是我们的项目中全都变成了JSP,一个项目可能会有成百上千JSP。
        > 但是经过长时间的实践发现,虽然JSP可以去调用java代码,
            但是当jsp中的java代码过多,jsp会变得非常不好维护,
                所以人们又想起了被冷落已久的Servlet。
        > Servlet和JSP实际上是各有优势:
            Servlet擅长调用Java代码,不擅长显示一个页面
            JSP擅长显示一个动态页面,但是不擅长编写大量的java代码
        > 分工:
            1.Servlet负责调用后台程序处理用户请求
            2.JSP负责显示动态页面
        > 域对象使用原则:
            能用小的就不用大的
 
 
 

转载请注明出处!

http://www.cnblogs.com/libingbin/

感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。

 
 
 
 
 
 
 

MVC模式与三层架构和表示层的更多相关文章

  1. MVC模式与三层架构的区别

    之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...

  2. 浅析MVC模式与三层架构的区别

    浅析MVC模式与三层架构的区别 三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来以后才是三层架构中的UI层).三层架构(3-tier application) 通常意义上的三层架构就是 ...

  3. 浅析MVC模式与三层架构的区别01

    三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...

  4. MVC模式(三层架构模式)

    (Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). MVC模式最早由Try ...

  5. MVC简介与三层架构

    感谢博客园团队日夜辛苦的付出 感谢阅读我文章的每位读者 1.MVC简介 MVC最早于1978年提出,是软件工程中的一种软件架构模式,这时距离微软在1985年推出Window1.0还有7年之久,当时的M ...

  6. MVC和普通三层架构的区别

    MVC和普通三层架构的区别 其中这里的模型(Model)和视图(View )是完全区别于三层架构中的模型(Model)和视图(View)的. MVC 1)MVC中的模型(Model)指的是数据模型,用 ...

  7. MVC设计模式与三层架构

    三层架构分别是:表示层(Web层).业务逻辑层(BLL层)和数据访问层(DAL层). (1)表示层负责: a.从用户端收集信息 b.将用户信息发送到业务服务层做处理 c.从业务服务层接收处理结果 d. ...

  8. MVC 设计模式与三层架构

    一.JavaEE开发模式 什么是开发模式 模式是在开发过程中总结出的"套路",总结出的一套约定俗成的设计模式 JavaEE模式 model1模式 技术组成 :jsp+javaBea ...

  9. 用VS2010创建三层架构开发模式及三层架构的研究

    三层架构的研究 三层体系结构的概念 用户界面表示层(USL) 业务逻辑层(BLL) 数据访问层(DAL) BLL将USL与DAL隔开了,并且加入了业务规则   各层的作用 1:数据数据访问层:主要是对 ...

随机推荐

  1. C#串口通信

    通过COM1发送数据,COM2接收数据.当COM2接收完本次发送的数据后,向COM1发送信息通知COM1本次数据已发完,COM1接到通知后,再发下一段数据.这样可以确保每次发送的数据都可以被正确接收. ...

  2. Android经典完美退出方法

    Android经典完美退出方法,使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activit ...

  3. Java递归列出所有文件和文件夹

    package file_op; import java.io.File; public class file_list { static int n =0; /** * @param args */ ...

  4. FAILED BINDER TRANSACTION

    最近开发Widget,要在Widget上显示图片,出现了FAILED BINDER TRANSACTION错误,后来才发现是因为图片太大了.Widget使用的是RemoteViews,而Intent传 ...

  5. 在ListActivity中显示图标

    在ListActivity中显示图标,好像并不复杂,实现起来却不轻松. 首先,定义列表中的每一行,这里不是用xml文件定义,而是用一个类定义,CheckBox.ImageView.TextView等控 ...

  6. Firemonkey 指定 StringGrid 只能上下滾动,不要左右滚动

    要使 StringGrid 只能上下滚动,不要左右滚动,只要加入下面代码即可: StringGrid1.AniCalculations.TouchTracking := [ttVertical]; p ...

  7. 设置Xshell中支持中文

    执行echo $LANG命令输出的是当前的编码方式,执行locale命令得到系统中所有可用的编码方式.要让Xshell不显示乱码,则要将编码方式改为UTF-8. 在Xshell中[file]-> ...

  8. ahjesus Ubuntu配置svn服务器

    转载自http://www.cnblogs.com/ximu/articles/2119136.html 亲测可用 一.SVN安装1.安装包$ sudo apt-get install subvers ...

  9. long和BigDecimal引发的管理思考

    关于long.double.BigDecimal在效率.可用性.灵活性等等方面的技术性讨论和测试其实在网上已经很多了,本文也不是打算讨论他们的实现的,其实笔者也曾在很长的职业生涯周期中一度拘泥于此.但 ...

  10. Volatile实现原理

    volatile 在多线程上volatile 是synchronized 轻量级实现.在多核处理器开发中保证了共享变量的"可见性".可见性是指当一个线程修改一个共享变量的时候,另外 ...