基于mvc的java web_构建一个简单的基于MVC模式的JavaWeb

本文介绍了如何基于MVC设计模式构建一个简单的Java Web登录系统。系统包括四个部分:模型(Model)、视图(View)、控制器(Controller)和数据访问层。通过JSP、Servlet和JavaBean,实现了用户登录时的数据库交互、视图展示和控制流程。当用户提交登录信息后,系统检查用户是否已注册,然后跳转到相应页面。虽然这个例子展示了MVC的基本概念,但在实际大型系统中,控制器与视图间的紧密耦合可能不利于扩展和维护,因此通常会使用如Struts等MVC框架来解决这一问题。
摘要由CSDN通过智能技术生成

零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是因为那里是我伤心的地方,也或许是因为我在那里失败过,所以内心一直都有点抵触,昨天是一室友的生日,也快过年,也是想和他们一起好好的玩一回,就放下一切去了,很久都没去吼歌了,嗓子现在都感觉哑哑的,今天一天仿佛没有干什么,有些不安,于是回来后把以前学习MVC时笔记写下来!

MVC设计模式是目前使用得比较多的一种设计模式,最早出现在Smalltalk中,后来广泛应用于Java Web 应用程序中。Model(模型)表示业务逻辑层,View(视图)代表表示层,Contraller(控制器)代表控制层!

在Java Web应用程序中,View部份一般用JSP和HTML构建。客户在View部份提交请求,在业务逻辑层处理后,把处理结果又返回给View部份显示出来。因此,View部份也是WEB应用程序的用户界面!

Controller部份一般由Servlet组成。当用户请求从View部分传过来时,Controller把该请求发给适当的业务逻辑组件处理,请求处理完成后,又返回给Controller.后者再把处理结果转发给适当的View组件显示。因此,Controller在视图层与业务逻辑层之间起到了桥梁作用,控制了它们两者之间的数据流向!

Model部分 包括业务逻辑层和数据库访问层。在JAVA WEB 应用程序中,业务逻辑层一般由JAVABEAN或EJB构建。EJB是J2EE的核心组件,可以构建分布式应用系统。与普通的JAVABEAN不同,它由二个接口和一个实现类组成,并且包含一些固有的用于控制容器生命周期的方法!

数据访问层也叫数据持久层,它主要负责与库打交道,用于从数据库中存取数据。在JAVA WEB应用中,我们常用JDBC API或Hibernate来构建数据持久层。例如,把与数据连接的代码以从数据库中存取数据的代码封装在不同的对象中,这样便于系统中其他业务逻辑组件调用它们。

这样,一个JAVA WEB应用程序划分为表示层,控制层,业务逻辑层和数据持久层,形成了一个多层系统。对于大型,复杂的WEB应用程序,这样的是十分必要的!

下面来构建一个简单的基于MVC模式的JAVA  WEB应用程序,我们按照MVC设计模式,用JSP,Servlet及Java Bean构建一个简单的登录系统。该系统要求当用户在登录页面上输入用户名和密码并提交后,系统将检查该用户中否已经注册,如果该用户已经注册,系统进入主页面,否则进入注册页面!

我们将 按以下步骤构建这个系统:

Step1:数据库的设计,使用MySQL作为数据库,构建数据表T_UserInfo;

Step2:构建视图组件:登录页面login.jsp,主页面main.jsp,以及注册页面register.jsp;

Step3:构建控制层组件,一个Servlet,;取名为LoginServlet.java;

Step4:构建业务逻辑层组件(Model组件),一个JavaBean,取名为LoginHandler.java;

Step5:构建数据访问层组件:珍上数据访问类,取名dbPool.java;

Step6:编译,打包程序;

Step7:部署该程序到Web服务器Tomcat中,然后运行!

该系统的工作流程图如下:

00cab23ebb24c1d3b346f37d82632a39.png

详细设计:

A:用户登录涉及数据库操作的用例!我们在MySQL中 建立一个T_UserInfo表,DDL语句如下:

731655954c7be9d8835ece551b5385f8.pngcreate table T_UserInfo

731655954c7be9d8835ece551b5385f8.png(

731655954c7be9d8835ece551b5385f8.png    ID bigint primary key auto_increment,

731655954c7be9d8835ece551b5385f8.png    userName varchar(20),

731655954c7be9d8835ece551b5385f8.png    userPwd varchar(20)

731655954c7be9d8835ece551b5385f8.png)

731655954c7be9d8835ece551b5385f8.png--并添加一条测试数据用户名及密码均为fengyan

731655954c7be9d8835ece551b5385f8.pnginsert into T_UserInfo(userName,userPwd) values('fengyan','fengyan')

B:构建视图组件,由前面的分析可知本例有三个视图组件,分别是登录页面login.jsp,主页面main.jsp,以及注册页面register.jsp.它们之间的关系是当用户在登录页面login.jsp上填入用户名及密码并提交后,系统将 检测该用户是琐已经注册,如果已经注册则进入main.jsp,否则进入注册页面!

login.jsp代码如下:

24a924a57ba6b3f2b51fc9edb7ea4186.png

731655954c7be9d8835ece551b5385f8.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png  

731655954c7be9d8835ece551b5385f8.png        

731655954c7be9d8835ece551b5385f8.png    

login.jsp

731655954c7be9d8835ece551b5385f8.png    

731655954c7be9d8835ece551b5385f8.png  

731655954c7be9d8835ece551b5385f8.png  

     

731655954c7be9d8835ece551b5385f8.png      

731655954c7be9d8835ece551b5385f8.png        

731655954c7be9d8835ece551b5385f8.png          

Login:

731655954c7be9d8835ece551b5385f8.png          

731655954c7be9d8835ece551b5385f8.png        

731655954c7be9d8835ece551b5385f8.png        

731655954c7be9d8835ece551b5385f8.png          

Password:

731655954c7be9d8835ece551b5385f8.png          

731655954c7be9d8835ece551b5385f8.png        

731655954c7be9d8835ece551b5385f8.png        

731655954c7be9d8835ece551b5385f8.png          

731655954c7be9d8835ece551b5385f8.png        

731655954c7be9d8835ece551b5385f8.png      

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png  

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

当用户按下登录后就提交给叫做LoginServlet的Servlet,以做进一步处理!

为方便起见,主页面main.jsp的内容设计的很简单。当用户登录成功后,系统转入main.jsp告诉用户已经登录成功,现已进入主页面。main.jsp代码如下:

24a924a57ba6b3f2b51fc9edb7ea4186.png

f466905a3bcb5dcef110eab799825254.png    pageEncoding="GBK"%>

731655954c7be9d8835ece551b5385f8.pnghtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

Insert title here

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png,你成功登录,现已进入主页面!

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

注册页面,register.jsp的内容也设计的很简单。当用户登录失败后,系统进入register.jsp,告诉用户登录失败,代码如下:

24a924a57ba6b3f2b51fc9edb7ea4186.png

f466905a3bcb5dcef110eab799825254.png    pageEncoding="GBK"%>

731655954c7be9d8835ece551b5385f8.pnghtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

Insert title here

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png,你未能成功登录,现进入注册页面,请注册你的信息!

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

C:构建数据访问组件,先创建一个属性文件db.properties用于设置库连接信息代码如下:

731655954c7be9d8835ece551b5385f8.pngDBDriver=com.mysql.jdbc.Driver

731655954c7be9d8835ece551b5385f8.pngConnection=jdbc:mysql://localhost:3306/study

731655954c7be9d8835ece551b5385f8.pngUser=root

731655954c7be9d8835ece551b5385f8.pngPassword=root

本用例的数据访问组件是DbPool,代码如下:

731655954c7be9d8835ece551b5385f8.pngpackage data;

24a924a57ba6b3f2b51fc9edb7ea4186.png/**

1408c5260b2f05e450dee929db9be5f7.png * 数据访问组件

1408c5260b2f05e450dee929db9be5f7.png * @author fengyan

1408c5260b2f05e450dee929db9be5f7.png * @date 2007-01-06 03:25

f466905a3bcb5dcef110eab799825254.png */

731655954c7be9d8835ece551b5385f8.png */

731655954c7be9d8835ece551b5385f8.pngimport java.io.InputStream;

731655954c7be9d8835ece551b5385f8.pngimport java.sql.Connection;

731655954c7be9d8835ece551b5385f8.pngimport java.sql.DriverManager;

731655954c7be9d8835ece551b5385f8.pngimport java.sql.PreparedStatement;

731655954c7be9d8835ece551b5385f8.pngimport java.sql.ResultSet;

731655954c7be9d8835ece551b5385f8.pngimport java.util.Properties;

731655954c7be9d8835ece551b5385f8.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngpublic class DbPool {

1408c5260b2f05e450dee929db9be5f7.png

1408c5260b2f05e450dee929db9be5f7.png    private static DbPool instance = null;

1408c5260b2f05e450dee929db9be5f7.png    private DbPool()

715f2d05503b99d41f3b6ba2cdccc84d.png    {

1408c5260b2f05e450dee929db9be5f7.png        super();

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

1408c5260b2f05e450dee929db9be5f7.png    //取得连接

1408c5260b2f05e450dee929db9be5f7.png    public static synchronized Connection getConnection()

715f2d05503b99d41f3b6ba2cdccc84d.png    {

1408c5260b2f05e450dee929db9be5f7.png        if(instance == null)

1408c5260b2f05e450dee929db9be5f7.png            instance = new DbPool();

1408c5260b2f05e450dee929db9be5f7.png        return instance._getConnection();

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

1408c5260b2f05e450dee929db9be5f7.png    private Connection _getConnection()

715f2d05503b99d41f3b6ba2cdccc84d.png    {

1408c5260b2f05e450dee929db9be5f7.png        try

715f2d05503b99d41f3b6ba2cdccc84d.png        {

1408c5260b2f05e450dee929db9be5f7.png            String dBDriver = null;

1408c5260b2f05e450dee929db9be5f7.png            String connectionUrl = null;

1408c5260b2f05e450dee929db9be5f7.png            String user = null;

1408c5260b2f05e450dee929db9be5f7.png            String password = null;

1408c5260b2f05e450dee929db9be5f7.png            

1408c5260b2f05e450dee929db9be5f7.png            Properties p = new Properties();

1408c5260b2f05e450dee929db9be5f7.png            InputStream inStream = getClass().getResourceAsStream("db.properties");

1408c5260b2f05e450dee929db9be5f7.png            p.load(inStream);

1408c5260b2f05e450dee929db9be5f7.png            

1408c5260b2f05e450dee929db9be5f7.png            dBDriver =p.getProperty("DBDriver",dBDriver);

1408c5260b2f05e450dee929db9be5f7.png            connectionUrl = p.getProperty("Connection",connectionUrl);

1408c5260b2f05e450dee929db9be5f7.png            user = p.getProperty("User","");//默认值为空

1408c5260b2f05e450dee929db9be5f7.png            password = p.getProperty("Password","");

1408c5260b2f05e450dee929db9be5f7.png            

1408c5260b2f05e450dee929db9be5f7.png            //加载驱动

1408c5260b2f05e450dee929db9be5f7.png            Class.forName(dBDriver).newInstance();

1408c5260b2f05e450dee929db9be5f7.png            return DriverManager.getConnection(connectionUrl+"?user="+user+"&password="+password);

1408c5260b2f05e450dee929db9be5f7.png            

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }catch(Exception e)

715f2d05503b99d41f3b6ba2cdccc84d.png        {

1408c5260b2f05e450dee929db9be5f7.png            System.out.println(e);

1408c5260b2f05e450dee929db9be5f7.png            return null;

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

1408c5260b2f05e450dee929db9be5f7.png    

1408c5260b2f05e450dee929db9be5f7.png    //释放资源

1408c5260b2f05e450dee929db9be5f7.png    public static void DBClose(Connection con ,PreparedStatement ps,ResultSet rs)

715f2d05503b99d41f3b6ba2cdccc84d.png    {

1408c5260b2f05e450dee929db9be5f7.png        try

715f2d05503b99d41f3b6ba2cdccc84d.png        {

1408c5260b2f05e450dee929db9be5f7.png            if(rs !=  null)

1408c5260b2f05e450dee929db9be5f7.png                rs.close();

1408c5260b2f05e450dee929db9be5f7.png            if(ps != null)

1408c5260b2f05e450dee929db9be5f7.png                ps.close();

1408c5260b2f05e450dee929db9be5f7.png            if(con != null)

1408c5260b2f05e450dee929db9be5f7.png                con.close();

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }catch(Exception e)

715f2d05503b99d41f3b6ba2cdccc84d.png        {

1408c5260b2f05e450dee929db9be5f7.png            System.out.println(e);

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

f466905a3bcb5dcef110eab799825254.png}

731655954c7be9d8835ece551b5385f8.png

DbPool先从一个属性文件db.properties中获取数据库驱动程序名,URL,用户名和密码,然后利用这些信息连接数据库,取得连接!

D:构建模型组件,本用例的模型组件(或称为业务逻辑组件)是LoginHandler,代码如下:

731655954c7be9d8835ece551b5385f8.pngpackage model;

24a924a57ba6b3f2b51fc9edb7ea4186.png/**

1408c5260b2f05e450dee929db9be5f7.png * 模型组件

1408c5260b2f05e450dee929db9be5f7.png * @author fengyan

1408c5260b2f05e450dee929db9be5f7.png * date 2007-01-06 03:27

f466905a3bcb5dcef110eab799825254.png */

731655954c7be9d8835ece551b5385f8.pngimport java.sql.Connection;

731655954c7be9d8835ece551b5385f8.pngimport java.sql.PreparedStatement;

731655954c7be9d8835ece551b5385f8.pngimport java.sql.ResultSet;

731655954c7be9d8835ece551b5385f8.pngimport java.util.ArrayList;

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.pngimport data.DbPool;

731655954c7be9d8835ece551b5385f8.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngpublic class LoginHandler {

1408c5260b2f05e450dee929db9be5f7.png

1408c5260b2f05e450dee929db9be5f7.png    Connection con;

1408c5260b2f05e450dee929db9be5f7.png    PreparedStatement ps;

1408c5260b2f05e450dee929db9be5f7.png    ResultSet rs;

1408c5260b2f05e450dee929db9be5f7.png    

1408c5260b2f05e450dee929db9be5f7.png    //检查是否已经注册

1408c5260b2f05e450dee929db9be5f7.png    public boolean checkLogin(ArrayList arr)

715f2d05503b99d41f3b6ba2cdccc84d.png    {

1408c5260b2f05e450dee929db9be5f7.png        //从数据访问组件中取得连接

1408c5260b2f05e450dee929db9be5f7.png        con = DbPool.getConnection();

1408c5260b2f05e450dee929db9be5f7.png        //得到Controller传入的用户输入的用户名及密码

1408c5260b2f05e450dee929db9be5f7.png        String userName = (String)arr.get(0);

1408c5260b2f05e450dee929db9be5f7.png        String userPwd = (String)arr.get(1);

1408c5260b2f05e450dee929db9be5f7.png        

1408c5260b2f05e450dee929db9be5f7.png        String strSql = "select * from T_UserInfo where userName=? and userPwd=?";

1408c5260b2f05e450dee929db9be5f7.png        try

715f2d05503b99d41f3b6ba2cdccc84d.png        {

1408c5260b2f05e450dee929db9be5f7.png            ps = con.prepareStatement(strSql);

1408c5260b2f05e450dee929db9be5f7.png            ps.setString(1,userName);

1408c5260b2f05e450dee929db9be5f7.png            ps.setString(2, userPwd);

1408c5260b2f05e450dee929db9be5f7.png            rs = ps.executeQuery();

1408c5260b2f05e450dee929db9be5f7.png            if(rs.next())

715f2d05503b99d41f3b6ba2cdccc84d.png            {    

1408c5260b2f05e450dee929db9be5f7.png                //释放资源

1408c5260b2f05e450dee929db9be5f7.png                DbPool.DBClose(con, ps, rs);            

1408c5260b2f05e450dee929db9be5f7.png                return true;

5bcb1807ee3e00d2b3c225f0b3f5c751.png            }

1408c5260b2f05e450dee929db9be5f7.png            else

715f2d05503b99d41f3b6ba2cdccc84d.png            {

1408c5260b2f05e450dee929db9be5f7.png                //释放资源

1408c5260b2f05e450dee929db9be5f7.png                DbPool.DBClose(con, ps, rs);

1408c5260b2f05e450dee929db9be5f7.png                return false;

5bcb1807ee3e00d2b3c225f0b3f5c751.png            }            

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }catch(Exception e)

715f2d05503b99d41f3b6ba2cdccc84d.png        {

1408c5260b2f05e450dee929db9be5f7.png            System.out.println(e);

1408c5260b2f05e450dee929db9be5f7.png            return false;

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }

1408c5260b2f05e450dee929db9be5f7.png        

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

f466905a3bcb5dcef110eab799825254.png}

731655954c7be9d8835ece551b5385f8.png

E:本用例的控制组件是一个Servlet,叫做LoginServlet,代码如下

731655954c7be9d8835ece551b5385f8.pngpackage controller;

24a924a57ba6b3f2b51fc9edb7ea4186.png/**

1408c5260b2f05e450dee929db9be5f7.png * 控制器

1408c5260b2f05e450dee929db9be5f7.png * @author fengyan

1408c5260b2f05e450dee929db9be5f7.png * date 2007-01-06 03:29

f466905a3bcb5dcef110eab799825254.png */

731655954c7be9d8835ece551b5385f8.pngimport java.io.IOException;

731655954c7be9d8835ece551b5385f8.pngimport java.io.PrintWriter;

731655954c7be9d8835ece551b5385f8.pngimport java.util.ArrayList;

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.pngimport javax.servlet.ServletException;

731655954c7be9d8835ece551b5385f8.pngimport javax.servlet.http.HttpServlet;

731655954c7be9d8835ece551b5385f8.pngimport javax.servlet.http.HttpServletRequest;

731655954c7be9d8835ece551b5385f8.pngimport javax.servlet.http.HttpServletResponse;

731655954c7be9d8835ece551b5385f8.pngimport javax.servlet.http.HttpSession;

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.pngimport model.LoginHandler;

731655954c7be9d8835ece551b5385f8.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngpublic class LoginServlet extends HttpServlet {

1408c5260b2f05e450dee929db9be5f7.png

1408c5260b2f05e450dee929db9be5f7.png    private static final String CONTENT_TYPE = "text/html;charset=GBK";

1408c5260b2f05e450dee929db9be5f7.png

715f2d05503b99d41f3b6ba2cdccc84d.png    public LoginServlet() {

1408c5260b2f05e450dee929db9be5f7.png        super();

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

1408c5260b2f05e450dee929db9be5f7.png

715f2d05503b99d41f3b6ba2cdccc84d.png    public void destroy() {

1408c5260b2f05e450dee929db9be5f7.png        super.destroy(); // Just puts "destroy" string in log

1408c5260b2f05e450dee929db9be5f7.png        // Put your code here

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

1408c5260b2f05e450dee929db9be5f7.png

1408c5260b2f05e450dee929db9be5f7.png    public void doGet(HttpServletRequest request, HttpServletResponse response)

715f2d05503b99d41f3b6ba2cdccc84d.png            throws ServletException, IOException {

1408c5260b2f05e450dee929db9be5f7.png

1408c5260b2f05e450dee929db9be5f7.png        doPost(request,response);

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

1408c5260b2f05e450dee929db9be5f7.png

1408c5260b2f05e450dee929db9be5f7.png    

1408c5260b2f05e450dee929db9be5f7.png    public void doPost(HttpServletRequest request, HttpServletResponse response)

715f2d05503b99d41f3b6ba2cdccc84d.png            throws ServletException, IOException {

1408c5260b2f05e450dee929db9be5f7.png

1408c5260b2f05e450dee929db9be5f7.png        //从请求中取出用户名和密码

1408c5260b2f05e450dee929db9be5f7.png        String userName = request.getParameter("userName");

1408c5260b2f05e450dee929db9be5f7.png        String userPwd = request.getParameter("userPwd");

1408c5260b2f05e450dee929db9be5f7.png        //生成一个ArrayList对象,并把用户名和密码的值存入该对象中

1408c5260b2f05e450dee929db9be5f7.png        ArrayList arr = new ArrayList();

1408c5260b2f05e450dee929db9be5f7.png        arr.add(userName);

1408c5260b2f05e450dee929db9be5f7.png        arr.add(userPwd);

1408c5260b2f05e450dee929db9be5f7.png        

1408c5260b2f05e450dee929db9be5f7.png        //生成一个Session对象

1408c5260b2f05e450dee929db9be5f7.png        HttpSession session = request.getSession(true);

1408c5260b2f05e450dee929db9be5f7.png        session.removeAttribute("userName");

1408c5260b2f05e450dee929db9be5f7.png        session.setAttribute("userName", userName);

1408c5260b2f05e450dee929db9be5f7.png        

1408c5260b2f05e450dee929db9be5f7.png        //调用模型组件

1408c5260b2f05e450dee929db9be5f7.png        LoginHandler login = new LoginHandler();

1408c5260b2f05e450dee929db9be5f7.png        boolean flag = login.checkLogin(arr);

1408c5260b2f05e450dee929db9be5f7.png        

1408c5260b2f05e450dee929db9be5f7.png        //如果已注册

1408c5260b2f05e450dee929db9be5f7.png        if(flag)

715f2d05503b99d41f3b6ba2cdccc84d.png        {

1408c5260b2f05e450dee929db9be5f7.png            response.sendRedirect("/MVC/main.jsp");

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }

1408c5260b2f05e450dee929db9be5f7.png        else

715f2d05503b99d41f3b6ba2cdccc84d.png        {

1408c5260b2f05e450dee929db9be5f7.png            response.sendRedirect("/MVC/register.jsp");

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

1408c5260b2f05e450dee929db9be5f7.png

715f2d05503b99d41f3b6ba2cdccc84d.png    public void init() throws ServletException {

1408c5260b2f05e450dee929db9be5f7.png        // Put your code here

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }

1408c5260b2f05e450dee929db9be5f7.png

f466905a3bcb5dcef110eab799825254.png}

731655954c7be9d8835ece551b5385f8.png

该组件先处理Http POST请求,然后调用模型组件或业务逻辑组件LoginHandler检查该用户是否已注册如注册,则转入main.jsp,否则转入register.jsp,另外,Servlet都要在web.xml中声明,

731655954c7be9d8835ece551b5385f8.png<?xml  version="1.0" encoding="UTF-8"?>

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png    xmlns="http://java.sun.com/xml/ns/j2ee" 

731655954c7be9d8835ece551b5385f8.png    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

731655954c7be9d8835ece551b5385f8.png    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 

731655954c7be9d8835ece551b5385f8.png    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

731655954c7be9d8835ece551b5385f8.png 

731655954c7be9d8835ece551b5385f8.png     /login.jsp

731655954c7be9d8835ece551b5385f8.png 

731655954c7be9d8835ece551b5385f8.png  

731655954c7be9d8835ece551b5385f8.png    This is the description of my J2EE component

731655954c7be9d8835ece551b5385f8.png    This is the display name of my J2EE component

731655954c7be9d8835ece551b5385f8.png    LoginServlet

731655954c7be9d8835ece551b5385f8.png    controller.LoginServlet

731655954c7be9d8835ece551b5385f8.png  

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png  

731655954c7be9d8835ece551b5385f8.png    LoginServlet

731655954c7be9d8835ece551b5385f8.png    /servlet/LoginServlet

731655954c7be9d8835ece551b5385f8.png  

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png

到此,整个系统完成设计!运行结果达到我们预期的的效果!

总结:上面结合使用JSP,Servlet和JavaBean构建了一个简单的基于MVC模式的登录系统。但我们看到在用这种方式构建的Java Web 应用系统中,控制器LonginController中包含重定向页面的名称,如下:

731655954c7be9d8835ece551b5385f8.pngif(flag)

24a924a57ba6b3f2b51fc9edb7ea4186.png        {

1408c5260b2f05e450dee929db9be5f7.png            response.sendRedirect("/MVC/main.jsp");

f466905a3bcb5dcef110eab799825254.png        }

731655954c7be9d8835ece551b5385f8.png        else

24a924a57ba6b3f2b51fc9edb7ea4186.png        {

1408c5260b2f05e450dee929db9be5f7.png            response.sendRedirect("/MVC/register.jsp");

f466905a3bcb5dcef110eab799825254.png        }

这样会使系统的视图组件与控制层组件耦合很紧密,不便于系统的扩展和维护。对于大型Java Web系统,这样的紧密耦合性会合系统的扩展和维护变的十分困难。为了解决这些问题,一些优秀的MVC框架出现了,而Struts就是其中应用最普遍的一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值