JSP+Servlet+JavaBean
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转发给用户。
ControlServlet.java
- 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开发人员)集中精力于表现形式上。
出处:http://blog.csdn.net/liupeng900605/article/details/6985344
JSP+Servlet+JavaBean的更多相关文章
- JSP+Servlet+javabean+oracle实现页面多条件模糊查询
之前写过一篇JSP+Servlet+javabean+mysql实现页面多条件模糊查询 使用的是mysql进行的分页查询,mysql用limit控制,而oracle则是用rownum,今天第一次写or ...
- JSP中使用的模式——JSP+Servlet+JavaBean
上一篇博文写到模式一:JSP+JavaBean 链接地址:http://wxmimperio.coding.io/?p=155 JSP中两种模式的总结 链接地址:http://wxmimperio.c ...
- MVC jsp+servlet+javabean 连接Mysql数据库測试demo
本文介绍的是怎样使用MVC架构去实现jsp+servlet+javabean连接数据库 首先我们应该了解什么是MVC: MVC包含三个部分 : ①View:由各种JSP页面组成. ②Controlle ...
- 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)
在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识, ...
- jsp+servlet+javabean开发web项目
一.介绍: 项目依赖包:jdbc数据库包 jsp+servlet+javabean开发web项目,是最接近web项目原生运行原理的. 但是,jsp内容混乱,项目结构复杂时,代码会混乱 二.运行原理: ...
- Jsp+Servlet+JavaBean经典MVC模式理解
MVC模式目的(实现Web系统的职能分工). 在Java EE中,Jsp+Servlet+JavaBean算是里面经典的模式,是初学者必备的知识技能.M, Model(模型)实现系统的业务逻辑 1.通 ...
- (jsp+servlet+javabean )MVC架构
MVC是三个单词的缩写,这三个单词分别为:模型.视图和控制. 使用的MVC的目的:在于将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如Windows系统资源管理器文件夹内容的显示方 ...
- JSP+Servlet+javabean+mysql实现页面多条件模糊查询
需求: 一般列表页上面会有一个查询框,有各种的查询条件组合,一般都采用模糊查询方式 ,以下以自己做的实例来说明一下实现方法: 需要实现的界面原型:要满足条件: 1.单选分类,点GO按扭 2.单独输入标 ...
- jsp+servlet+javaBean+Dao
一.Servlet程序各模块介绍1.JSP 用于显示.收集数据的部分.2.Servlet 用于验证数据.实例化JavaBean.调用DAO连接数据库.控制页面跳转3.DAO 用于连接数据库及进行数据库 ...
随机推荐
- Nodejs学习之一 下载安装与部署nodejs
1,下载nodejs 访问nodejs官网 www.nodejs.org/download/ 下载与机器相匹配的版本 2,安装nodejs 下载下来的msi包一直点击下一步即可 3,部署环 ...
- python的subprocess无法进行通信(无法通过管道输入数据)的问题解决
1.在主进程使用 p.stdin.write("something\n") 要有回车!要有回车!要有回车! 2.在子进程使用 data = raw_input() 读取数据,再用 ...
- 关于Servlet的PrintWriter 中文乱码问题
ps:servlet的PrintWriter和ServletOutputStream是不能同时使用的,同时使用会抛异常; PrintWriter是字符流.ServletOutputStream是字节流 ...
- UIView动画学习笔记
UIView的动画是通过修改控件的属性来达到动画的效果,如:渐变, 移动. 废话不多说,直接上代码: - (void)loadView{ [super loadView]; _leftView = [ ...
- java 调用 .net webservice
1.首先下载Axis2工具包 2.解压之后用cmd命令进入bin目录WSDL2Java.bat -uri http://192.168.20.42:9999/LoginService.asmx?wsd ...
- android学习——MeasureSpec介绍及使用
一.MeasureSpc类说明 SDK的介绍:MeasureSpc类封装了父View传递给子View的布局(layout)要求.每个MeasureSpc实例代表宽度或者高度 它有三种模式:①.UNSP ...
- ADO.NET+Access: 3,参数 @departmentName 没有默认值
ylbtech-Error-ADO.NET+Access: 3,参数 @departmentName 没有默认值. 1.A,错误代码返回顶部 3,参数 @departmentName 没有默认值. ...
- 怎样为EXCEL2010添加下拉列表
注意,下面是Excel2010的步骤和截图,其他版本的Excel类似. 首先用鼠标左键点击你要添加下拉列表的单元格. 如果你只想部分区域有下拉列表,也可以选择部分区域. 下面图片是选择的整个列都是 ...
- Selenium2Library系列 keywords 之 _ElementKeywords
#公有方法: (1)current_frame_contains(self, text, loglevel='INFO') (2)current_frame_should_not_contain(se ...
- 推荐一款C#反编译软件(开源)
大二的时候老师要求做过一个小项目,大概4个人左右一组.当时交流不是特别到位,项目在一个同学的电脑上建成了就一直在他的电脑上(所以好东西不要烂在你的硬盘里),也不知道什么源码管理,可悲到项目做完我还没有 ...