`
hold_on
  • 浏览: 456558 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用JSP+Servlet+JavaBean实现MVC设计模式的流程

阅读更多

前端时间学习了 MVC 模式,现在来谈谈自己对MVC的认识:

 

MVC是三个单词的缩写:M,Model(模型);V,View( 视图 ),C,Control(控制)。

MVC模式的目的就是实现Web系统的职能分工,

Model层:实现系统的业务逻辑,即javaBean部分

View层:负责与用户交互,即在界面上展示数据对象给用户,即html,jsp

Control层:Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作,当然就是Servlet的职责了

 

下面我们用MVC设计模式来实现 简单的用户登录过程

1、控制器Servlet的实现

系统中只有一个servlet即ControlServlet,所有页面发起的以"  *.do  "的请求,都被web.xml配置给ControlServlet进行处理,在ControlServlet中根据‘ * ’的字符串(即解析用户请求的路径),调用ActionFactory生成的制定Action对象,在将处理后的URL转发给用户。

 

package cn.netjava.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.netjava.action.Action;
import cn.netjava.action.ActionFactory;

/**
 * Servlet implementation class ControlServlet
 */
public class ControlServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//得到当前Servlet的请求路径
		String pathName =request.getServletPath();
		// request.getContextPath();得到项目名字
		System.out.println("pathName:"+pathName);
		//得到请求的Action名字
		int index = pathName.indexOf(".");
		String ActionName = pathName.substring(1, index);
		System.out.println(ActionName);
		//获取运行时参数
		String ActionClassName = this.getInitParameter(ActionName);
		//得到Action对象
		Action action = ActionFactory.getActionFactory().getAction(ActionClassName);
		//执行Action的execute得到要返回的URL路径
		String url = action.execute(request, response);
		if(url==null){
			request.getRequestDispatcher("error.jsp").forward(request, response);	
		}else{
			request.getRequestDispatcher(url).forward(request, response);
		}
	}

}

 

 

2、Action对象工厂类实现:

 

ActionFactory是一个单实例类(整个系统只需要使用其一个对象),它只提供一个Action对象,通过getAction(String ActionClassName) 的方法调用创建一个Action对象。这个方法在Control中被调用。代码如下:   

 

package cn.netjava.action;
/**
 * 根据Action名字,创建Action对象
 * @author Administrator
 *
 */
public class ActionFactory {

	//单例模式:不需要创建对象
	private ActionFactory(){
	}
	//单实例访问方法,得到ActionFactory对象
	public static ActionFactory getActionFactory(){
		if(af == null){
			af = new ActionFactory();
		}
		return af;
	}
	/**
	 * 根据具体的Action类名字创建Action对象
	 * @param ActionClassName :具体的Action类全名
	 * @return:Action类型对象
	 */
	public Action getAction(String ActionClassName){
		Action action = null;
		try{
			action = (Action) Class.forName(ActionClassName).newInstance();
		}catch(Exception e){
			e.printStackTrace();
		}
		return action;
	}
	
	private static ActionFactory af;
	
	
}
 

3、Action接口类定义:

所有的事件处理(即Action)类都必须实现这个接口

package cn.netjava.action;

public interface Action {
	/**
	 * 所有的具体Action实现这个接口
	 * @param request 请求对象
	 * @param response 应答对象
	 * @return :结果页面
	 */
	public String execute(javax.servlet.http.HttpServletRequest request,javax.servlet.http.HttpServletResponse response);
	
}

 4、web.xml中配置请求发送给控制器Servlet

 

最后,我们只需要在wex.xml中对MVC结构的配置:

视图页面中的请求都是以<动作名字>.do结尾,当这个请求到达web服务器后,会被服务器转向给控制器处理,控制器在根据解析出的动作名,调用对应的Action对象,处理结果,并输出结果页面,所以web.xml中必须有如下配置:

<servlet>
    <servlet-name>controlServlet</servlet-name>
    <servlet-class>cn.netjava.servlet.ControlServlet</servlet-class>
    <init-param>
    	<param-name>loginAction</param-name>
    	<param-value>cn.netjava.action.LoginAction</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>controlServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

 4、具体的Action类实现(即对登录动作进行处理的类)

 

package cn.netjava.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginAction implements Action {

	public String execute(HttpServletRequest request,
			HttpServletResponse response) {
		// 得到用户名和密码
		String userName = request.getParameter("userName");
		String userPwd = request.getParameter("userPwd");
		if (userName.equals("netjava") && userPwd.equals("netjava")) {
			request.setAttribute("userName", userName);
			return "main.jsp";
		} else {
			return "login.jsp";
		}
	}

}

 如果登录成功,跳转到 main.jsp页面,否则,返回login,jsp页面

 

以下是main.jsp和login.jsp页面:

main.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1 style="color:red"><%=request.getAttribute("userName") %>登录成功</h1>
</body>
</html>

 login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登录</title>
</head>
<body>
<form action="loginAction.do" method="post">
	用户名:<input type="text" name="userName" id="userName"><br>
	密码:<input type="password" name="userPwd" id="userPwd"><br>
	<input type="submit" value="登录"/>
</form>
</body>
</html>
 

 最后做个总结吧:以前我们与服务器进行交互,可能jsp页面和servlet中都将html和java代码参杂在一起,这会导致系统的系统维护困难、分工不清;例如在加有jsp代码段的网页中,程序员与美工之间的配合就非常困难!MVC结构的系统会从根本上强制我们将web系统中的数据对象、业务逻辑、用户界面三者分离,使得程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。

 

 

 

 

 

分享到:
评论

相关推荐

    JSP源码——jsp+servlet+javaBean实现MVC_jspmvc.zip

    【JSP源码——jsp+servlet+javaBean实现MVC】是基于Java Web技术构建的一种经典MVC(Model-View-Controller)模式的应用实例。在Web开发中,MVC模式被广泛采用,它将应用程序的业务逻辑、数据处理和用户界面分离,...

    Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统

    Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统 Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统 Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统

    Jsp+Servlet+JavaBean 实现MVC模式的留言本

    Jsp+Servlet+JavaBean 实现MVC模式的留言本 声明:本留言本所有源代码开源,使用者可以自由修改和传播,但仅限于非商业用途。 作者:梁龙 博客:http://www.lianglong.net.cn 由于这是本人学习JAVA的第一个项目,...

    jsp+servlet+javabean+ajax MVC模式,增删改查,数据分页显示

    总结来说,这个项目展示了如何使用`JSP+Servlet+JavaBean+Ajax`实现基于MVC模式的Web应用,包括基本的数据操作、分页显示以及文件上传功能。对于初学者,这样的实践能够帮助理解Web开发的基本流程和关键组件,同时...

    jsp+servlet+javabean实现mvc.rar

    在Java Web开发中,Model-View-Controller(MVC)是一种广泛应用的设计模式,它将应用程序的业务逻辑、数据处理和用户界面分离,提高了代码的可维护性和可复用性。"jsp+servlet+javabean实现mvc.rar"这个压缩包文件...

    jsp+servlet+javaBean实现MVC

    在Java Web开发中,"jsp+servlet+javaBean实现MVC"是一种常见的设计模式,用于构建动态、数据驱动的Web应用程序。MVC(Model-View-Controller)模式旨在分离业务逻辑、用户界面和数据管理,使得代码更易于维护和扩展...

    基于Servlet+JSP+JavaBean开发模式(MVC) 用户注册登陆模式.7z

    (基于MVC模式下web端的开发,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰) 仅供初学者参考,内有文档注释,部分细节不懂者,留言即可

    Jsp+servlet+javaBean实现MVC-jspmvc

    本文将深入探讨使用JSP、Servlet和JavaBean来实现MVC架构的知识点,这对于理解Web应用程序的组织结构和开发流程至关重要。 首先,我们来看标题“Jsp+servlet+javaBean实现MVC-jspmvc”。这表明我们要讨论的是如何...

    基于JSP+Servlet+JavaBean实现的图书管理系统

    【标题】基于JSP+Servlet+JavaBean实现的图书管理系统 在Web开发中,JSP(JavaServer Pages)、Servlet和JavaBean是常见的技术栈,它们共同构建了动态、交互式的Web应用程序,尤其适用于构建功能丰富的图书管理系统...

    JSP+Servlet+JavaBean制作简单留言板

    总结,JSP+Servlet+JavaBean的留言板系统是JavaEE开发中的基础应用,它展示了MVC(Model-View-Controller)设计模式的基本原理。通过学习和实践这个项目,开发者可以掌握Web开发中的基本技能,为进一步学习更复杂的...

    javaee 实验报告 实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用

    MVC(Model-View-Controller)模式是一种设计模式,它将业务逻辑(Model)、用户界面(View)和数据控制(Controller)分离,以提高代码的可维护性和可扩展性。在这个实验中,JSP作为View层负责展示数据,Servlet...

    Jsp+Servlet+JavaBean+JDBC简单登录实例

    **JSP+Servlet+JavaBean+JDBC简单登录实例详解** 在Web开发中,构建一个用户登录系统是常见的需求。...这种架构模式是Web开发中常用的设计模式,有助于理解和掌握Web应用的生命周期及数据交互流程。

    jsp+servlet+javabean实现的新闻发布系统

    5. **MVC模式**:虽然这里没有明确提到Model-View-Controller(MVC)设计模式,但JSP、Servlet、JavaBeans的组合体现了这种模式的精髓。JSP作为视图,展示数据;Servlet作为控制器,处理请求和响应;JavaBeans作为...

    使用JSP+Servlet+JavaBean(MVC)设计的网上书店

    此项目以JSP、servlet、JavaBean实现MVC三层架构,*仅供参考* 环境:eclipse_3.2、myeclipse_5.1、jdk_6.0、tomcat_5.5、数据库sql server 2005 为方便调试,未设置默认首页,请从bookworm.jsp登陆 数据库端口、...

    jsp+servlet+javaBean实现MVC-jspmvc.zip

    【标题】"jsp+servlet+javaBean实现MVC-jspmvc.zip" 提供了一个使用Java Web技术构建MVC(Model-View-Controller)架构的应用示例。MVC是一种设计模式,广泛应用于Web开发中,旨在分离业务逻辑、数据模型与用户界面...

    其他类别jsp+servlet+javaBean实现MVC-jspmvc

    【标题】"其他类别jsp+servlet+javaBean实现MVC-jspmvc" 涉及的是Web开发中经典的MVC(Model-View-Controller)设计模式的实现,使用了Java技术栈,包括JSP(JavaServer Pages)、Servlet以及JavaBean。这种模式在...

    其他类别jsp+servlet+javaBean实现MVC-jspmvc.zip

    该源码文件包"jsp+servlet+javaBean实现MVC_jspmvc.zip"是一个基于Java Servlet、JSP和JavaBean的Model-View-Controller(MVC)设计模式的实现。这个源码包可以作为计算机科学或相关领域的学生进行毕业设计或课程...

    jsp+servlet+javabean实现网上商城项目完整源码

    Servlet与JSP结合使用,实现了MVC(Model-View-Controller)设计模式,使得代码结构清晰,易于维护。 JavaBean是Java语言中的一个组件规范,它定义了一种标准的可重用代码模块。在本项目中,JavaBean通常被用来封装...

Global site tag (gtag.js) - Google Analytics