`

设计模式-----MVC

阅读更多

一、MVC框架

       主要是将web程序,分为三个层次,model层,view层,control层。其中,大家各尽其责,model层主要负责javabean类,和数据库类,主要负责数据。view层,负责显示,control层负责业务逻辑处理。使得网站的结构更加清晰,维护更加便利。

 

第一、控制层:主控制器的实现。

主控制器,如果不经过主控制器,我们的可以通过连接地址来直接访问servlet程序,但是如果我们需要隐藏servlet的映射地址,和不希望用户直接就能访问我的servlet,我们可以只写一个servlet,也就是主控制器,通过这个servlet,根据用户输入的请求地址,调用对应处理程序,处理程序进行处理,比如在请求对象中加入属性,或者在会话对象中加入属性 ,然后返回结果给主控制器,主控制器根据返回结果跳转。这样一来,就只有一个servlet,这个servlet我们通过配置url映射,可以将需要主控制器处理的一类访问进行处理,如果.do结尾的访问。

首先,配置一个servlet作为主控制器:

 <servlet>
    <description>主控制器</description>
    <servlet-name>control</servlet-name>
    <servlet-class>lmj.servlet.ControlServlet</servlet-class>
    <init-param>
      <param-name>ShowMainPage</param-name>
      <param-value>lmj.action.ShowMainPage</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>control</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

 在上面的配置中,给servlet配置了初始参数,并且给了参数的值,我们需要根据它来进行反射来动态的调用处理程序。经过上面的配置,凡是.do结尾的请求,都会访问这个servlet,也就这个对应的java类,下来看看在java程序中,如果根据请求来动态调用处理程序:

public class ControlServlet extends HttpServlet {
	
	//不管是get或者是post请求都会先调用servlet的service方法,所以我们可以直接重新这个方法
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//拿到请求的地址,解析出需要的部分,再通过它查看初始参数对应的值,再根据初始化参数的值,反射出处理程序的对象
		//处理对象调用处理程序,返回处理结果。
		
		String spath = request.getRequestURI();
		//截取需要的部分,去掉前面的路径和后缀.do
		//现在将user的文件放在一个文件夹  比如 8080/boke5/user/mainpage.do 需要保留/user/mainpage.do
		//因为已经将只有通过/user/*这样的访问才可以访问到user文件夹资源,我们在配置参数的时候也是/user/**.do
		//现在,需要用户输入 /user/  我们才会调用主控制程序中对应的处理程序,不然我们不做处理,而这样/user/的输入
		//是经历权限过滤的,所以处理程序不需要再判断权限。我们的配置参数加上了/user/,所有需要截取/user/**
		String path0 = spath.substring(spath.indexOf("/")+1,spath.lastIndexOf(".do"));
		System.out.println("****访问路径截取1"+path0);
		String path = path0.substring(path0.indexOf("/")+1);
		System.out.println("****访问路径截取2"+path);
		//通过该servlet对象得到初始参数,初始参数的值就是对应的处理程序
		String classpath = this.getInitParameter(path);		
		System.out.println(classpath);
		//如果有对应的处理程序,就处理,没有就跳转到错误页面.
  

 分析:首先我们覆写了httpservlet的service方法,覆写这个方法的原因是,不管你是post还是get请求访问该servlet都会调用这个方法,就不用在覆写post和get方法。

注意第二点:我们通过请求对象,得到用户的请求地址,在截取出我们需要的部分,再根据这儿部分去查找匹配主控制servlet有没有与之对应的初始参数名,如果有就取出来,这个值就是进行处理的类的全名称,得到了类全名称,就可以通过反射得到类的对象,再调用处理方法,级可以给主servlet返回处理结果。

这里需要看清楚通过this.getInitParameter(path); 来查找初始参数

下面看一看处理程序,我们规定一个接口,所有的处理程序都必须实现该接口,也作为处理程序的标志。

public interface ActionInterface {

	public String execute(HttpServletRequest request,HttpServletResponse response)
	throws IOException,ServletException;


}

 该接口,只需定义一个处理方法,该方法需要传入请求对象和响应对象,这样我们才好处理

再看处理程序类怎么写:

public class ShowMainPage implements ActionInterface {

	@Override
	public String execute(HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		// 通过model层,得到所有需要的数据,
		// 再将所有传递的数据,放到需要的地方,比如request或者session

		// 得到所有最新文章,和最新用户
		// 查询所有文章

		// 得到第几页
		int page=0;
		try {
			 page = Integer.parseInt(request.getParameter("page"));
		} catch (Exception e) {
			//如果取得第几个页面出错,则表示第一个页面
			page=1;
		}
		GetArticleDao getarticle = new GetArticleDao();
		//参数0表示查询得到的是所有的文章
	     ArrayList<Article> articles= getarticle.getNerArticle(page, 0);
	     //得到最后一页的页数,0表示所有文章
	     int lastpage= getarticle.getNum(0);
	     //将当前是第几个页面,最后的页数,该页需要显示的文章,放在request中,
	     // 主控制器,跳转到指定的jsp,jsp就可以访问这些数据
	   
	     if(page<=0||page>lastpage){
	    	 return "error.jsp";
	     }  
	     request.setAttribute("lastpage", lastpage);
	     request.setAttribute("page", page);
	     request.setAttribute("articles", articles);	     
		//
		return "mainpage.jsp";
	}

}

 

处理完成之后我们就返回一个需要跳转的地址,主控制根据它来跳转即可。

 

上面所述,也就是控制层。

 

视图层,就是jsp页面,通过el表达式,和jstl核心标签,方便的进行取值和显示。

 

model层,在很多情况下,我们需要操作数据库,我们单独写出很多操作数据库的类,供处理程序来调用,这样结构根据清晰。需要使用到的对象,也写在该包下,也就够成了model层。

 

 

 

 

分享到:
评论

相关推荐

    spring-mvc-showcase

    综上所述,"spring-mvc-showcase"项目不仅是一个学习Spring MVC的绝佳资源,也是实践和理解MVC设计模式的有效途径。通过对这个项目的深入研究,开发者能够掌握Spring MVC的精髓,提升Web应用开发的效率和质量。

    yydf-easy-mvc-master.zip

    MVC模式是一种常见的软件设计模式,用于分离业务逻辑、数据模型和用户界面。Easy-MVC在这一模式的基础上,提供了一套简洁的API和约定优于配置的原则,使开发者能够快速构建应用程序。 在"yydf-easy-mvc-master"项目...

    Java课程设计-基于MVC模式设计模式实现的留言本程序源码.zip

    Java课程设计-基于MVC模式设计模式实现的留言本程序源码.zipJava课程设计-基于MVC模式设计模式实现的留言本程序源码.zipJava课程设计-基于MVC模式设计模式实现的留言本程序源码.zipJava课程设计-基于MVC模式设计模式...

    Angle-3.4-mvc5-jquery

    MVC(Model-View-Controller)模式是它的核心设计思想,它将应用逻辑分为三个部分:模型(Model)负责数据处理,视图(View)负责展示,控制器(Controller)处理用户请求并协调模型和视图。 2. jQuery: jQuery ...

    translation-spring-mvc-4-documentation, Spring MVC 4.2.4 RELEASE 中文文档完整翻译稿.zip

    这个压缩包"translation-spring-mvc-4-documentation, Spring MVC 4.2.4 RELEASE 中文文档完整翻译稿.zip"包含了Spring MVC 4.2.4版本的官方文档的中文全译版,这对于中文开发者来说是一个极其宝贵的资源,它可以...

    Angle-3.4-mvc5-angular

    AngularJS引入了MVVM(Model-View-ViewModel)设计模式,通过数据绑定和依赖注入,简化了前端开发,尤其适合构建复杂的交互式应用。 在这个项目中,`backend-mvc5-angular` 可能是后端的核心部分,使用MVC5框架构建...

    spring-mvc-demo

    Spring MVC 是 Spring 框架的一部分,它是一个轻量级的、基于模型-视图-控制器(MVC)设计模式的 Web 应用开发框架。Spring MVC 提供了丰富的功能,使得开发者可以快速、高效地构建高质量的 Web 应用。在本示例 ...

    MVC设计模式详解

    **MVC设计模式详解** **一、什么是MVC设计模式** MVC,即Model-View-Controller(模型-视图-控制器)设计模式,是一种在软件工程中广泛应用于构建用户界面的架构模式。它将应用程序的数据处理、业务逻辑与用户界面...

    关于设计模式MVC(Model View Controller)模型-视图-控制器

    **MVC 模型-视图-控制器**是一种软件设计模式,起源于1980年代的Xerox PARC为Smalltalk-80编程语言设计的。MVC模式被广泛应用于现代软件开发,特别是在Java、ColdFusion和PHP等平台上。它的主要目标是将应用程序的...

    spring-webmvc-5.0.9 jar包、源码和javadoc

    spring-webmvc-5.0.9.RELEASE-sources.jar则包含了源码,可以深入研究Spring Web MVC的实现细节,对于学习和调试都非常有帮助。 九、依赖管理 在实际项目中,Spring Web MVC往往与其他Spring模块如Core、AOP、Data...

    一个改进版的spring-mvc-showcase

    总的来说,"一个改进版的spring-mvc-showcase"项目展示了如何利用Spring MVC构建一个现代Web应用,并且可能涵盖了许多高级特性,如AOP(面向切面编程)、RESTful API设计、拦截器、数据校验、异常处理等。...

    INFO-MVC-PHP

    2. **依赖注入**:为了提高代码的可测试性和灵活性,INFO-MVC-PHP可能会采用依赖注入(Dependency Injection)设计模式。这样,控制器和其他组件可以在运行时接收所需的服务,而不是硬编码依赖关系。 3. **分层结构...

    spring-webmvc-struts.jar

    2. **Model-View-Controller**:模型-视图-控制器架构,Spring MVC的核心设计模式,将业务逻辑、数据处理和用户界面分离,提高代码的可复用性和可维护性。 3. **HandlerMapping**:处理映射器,负责将请求映射到相应...

    MVC设计模式.ppt

    MVC设计模式讲解PPT材料,模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。MVC是一种软件设计模式,不仅仅应用于WEB。在日常生活中处处可以找到类似于MVC的例子。在WEB...

    MVC设计模式范例

    **MVC设计模式详解** **一、MVC模式概述** MVC(Model-View-Controller)设计模式是一种软件设计架构模式,广泛应用于Web应用开发,主要用于分离应用程序的业务逻辑、用户界面和数据处理。该模式将应用程序分为三...

    jsp的MVC设计模式

    MVC(Model-View-Controller)设计模式是一种广泛应用在Web开发中的架构模式,尤其是在Java Web领域,如JSP(JavaServer Pages)项目中。这种模式将应用程序的业务逻辑、用户界面和数据访问分离开来,提高了代码的可...

    毕设源码-基于MVC设计模式和BS结构实现的网上图书商城带说明文档.zip

    毕设源码-基于MVC设计模式和BS结构实现的网上图书商城带说明文档.zip毕设源码-基于MVC设计模式和BS结构实现的网上图书商城带说明文档.zip毕设源码-基于MVC设计模式和BS结构实现的网上图书商城带说明文档.zip毕设源码...

    puremvc-js-multicore-framework-master

    在本篇文章中,我们将深入探讨"puremvc-js-multicore-framework-master"这一项目,它代表了PureMVC在JavaScript中的多核实现。 1. **PureMVC简介** PureMVC是基于观察者模式的框架,它将应用程序分为三个主要部分...

    网上书城 spring-mvc

    2. **Model-View-Controller (MVC)架构**:这是一种设计模式,将业务逻辑(Model)、用户界面(View)和控制流程(Controller)分离,提高了代码的可维护性和可扩展性。 3. **@Controller注解**:标记一个类作为...

    mvc设计模式介绍与详细讲解

    ### MVC设计模式介绍与详细讲解 #### 一、MVC设计模式概述 MVC(Model-View-Controller)设计模式是一种广泛应用于软件工程中的架构模式,尤其在Web应用开发领域非常常见。它将应用程序分为三个核心组件:模型...

Global site tag (gtag.js) - Google Analytics