web开发模式

Model1

显示层,控制层,数据层,统一交给jsp或者javabean处理.

处理流程

客户端发送request 到 jsp jsp 执行javabean javabean读取databases

返回 databases 返回给javabean 在返回给jsp 在response 给客户端

问题

代码杂乱
即 jsp + dao 方式

model - view - controller

客户端发送request 到servlet 然后servlet 执行javabean javabean用于读取databases 控制器,获取到javabean读取的数据以后,再次返回给jsp,jso生成html文件,response 给客户端
分为 显示层 控制层 模型层

EJB 属于SUN提供的分布式组件服务 分为会话bean 实体bean 消息驱动bean

实栗

一个登录程序
用户提交登录信息,发送给servlet servlet数据验证失败将会返回给登录页,同时servlet将会调用数据层操作dao,dao到数据库databases进行验证,结果返回给servlet 然后返回两个结果,登录成功,登录失败.

代码如下

创建数据库

no 列名称 描述
1 userid 保存用户的登录id
2 name 用户真实姓名
3 password 用户密码

目录结构如下

jdbc层

package com.ming.dbc;

import java.sql.Connection;
import java.sql.DriverManager;

public class DatabaseConnection {
    private static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String DBURL = "jdbc:mysql://47.94.95.84:32786/test";
    private static final String DBUSER = "test";
    private static final String DBPASSWORD = "ABCcba20170607";
    private Connection connection = null;
    // 连接数据库
    public DatabaseConnection() throws Exception{
        try{
            Class.forName(DBDRIVER);
            connection = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
        }catch (Exception e){
            throw e;
        }
    }
    // 获得数据库连接
    public Connection getConnection(){
        return this.connection;
    }
    // 数据库关闭
    public void close() throws Exception{
        if(this.connection != null){
            try{
                this.connection.close();
            }catch (Exception e){
                throw  e;
            }
        }
    }
}

dao层

定义接口

package com.ming.dao;

import com.ming.vo.User;

public interface IUserDAO {
    /**
     * 用户登录验证
     * @param user 传入VO对象
     * @return 验证操作结果
     * @throws Exception 抛出错误
     */
    public boolean findLogin(User user) throws Exception;
}

实现类

package com.ming.dao;

import com.ming.vo.User;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserDAOImpl implements IUserDAO {
    // 数据库连接对象
    private Connection connection = null;
    // 操作对象
    private PreparedStatement preparedStatement = null;
    // 数据库连接
    public UserDAOImpl(Connection _connection){
        this.connection = _connection;
    }
    /**
     * 用户登录验证
     *
     * @param user 传入VO对象
     * @return 验证操作结果
     * @throws Exception 抛出错误
     */
    @Override
    public boolean findLogin(User user) throws Exception {
        boolean flag = false;
        try{
            String sql = "SELECT name FROM user WHERE userid = ? AND password = ?";
            // 获得实例化对象
            this.preparedStatement = this.connection.prepareStatement(sql);
            // 设置id
            this.preparedStatement.setString(1, user.getUserid());
            this.preparedStatement.setString(2, user.getPassword());
            ResultSet resultset = this.preparedStatement.executeQuery();
            if(resultset.next()){
                user.setName(resultset.getString(1));
                flag = true;
            }
        }catch (Exception e){
            throw  e;
        }finally {
            if(this.preparedStatement != null){
                try{
                    this.preparedStatement.close();
                }catch (Exception e){
                    throw  e;
                }
            }
        }
        return flag;
    }
}

代理类

package com.ming.dao;

import com.ming.dbc.DatabaseConnection;
import com.ming.vo.User;

public class UserDAOProxy implements IUserDAO {
    private DatabaseConnection databaseConnection = null;
    private IUserDAO dao = null;
    public UserDAOProxy(){
        try{
            this.databaseConnection = new DatabaseConnection();
        }catch (Exception e){
            e.printStackTrace();
        }
        this.dao = new UserDAOImpl(this.databaseConnection.getConnection());
    }
    /**
     * 用户登录验证
     *
     * @param user 传入VO对象
     * @return 验证操作结果
     * @throws Exception 抛出错误
     */
    @Override
    public boolean findLogin(User user) throws Exception {
        boolean flag = false;
        try{
            flag = this.dao.findLogin(user);
        }catch (Exception e){
            throw  e;
        }finally {
            this.databaseConnection.close();
        }
        return flag;
    }
}

定义代理工厂

package com.ming.factory;

import com.ming.dao.IUserDAO;
import com.ming.dao.UserDAOProxy;

public class DAOFactory {
    public static IUserDAO getIuserDAOInstance(){
        return new UserDAOProxy();
    }
}

实体关系映射

package com.ming.vo;

// 对user表进行映射
public class User {
    private String userid;
    private String name;
    private String password;

    public String getUserid() {
        return userid;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

视图层

<%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %><%--
  Created by IntelliJ IDEA.
  User: ming
  Date: 19-3-16
  Time: 下午11:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>用户登录程序</h2>
<%
    List<String> info = (List<String>)request.getAttribute("info");
    if(info != null){
        Iterator<String> iterator = info.iterator();
        while(iterator.hasNext()){
            %>
                <h4><%=iterator.next()%></h4>
            <%
        }
    }
%>
<form action="loginServlet" method="post">
    用户id <input type="text" name="userid" id="uname"/>
    密码 <input type="password" name="userpass" id="password"/>
    <input type="submit" value="登录" id="submit"/>
    <input type="reset" value="重置"/>
</form>
<script>
    let submit = document.getElementById("submit");
    submit.onclick = (event) => {
        let uname = document.getElementById("uname").value;
        let password = document.getElementById("password").value;
        if(!(/^\w{5,15}/.test(uname))){
            alert("用户id为5-15位");
            return false;
        }

        if(!(/^\w{5,15}/.test(password))){
            alert("密码必须为5-15位");
            return false;
        }
        return true;
    }
</script>
</body>
</html>

配置文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.ming.servlrt.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
    </servlet-mapping>
</web-app>

mvc运行流程

表单提交到servlet,servlet调用dao进行表单验证,然后dao连接数据库进行验证,验证结果返回给业务层,即servlet,在业务层servlet中获取info等日志信息,然后服务器端跳转到运行结果页面即view层.

原文地址:https://www.cnblogs.com/melovemingming/p/10549887.html

时间: 2024-10-17 05:46:41

web开发模式的相关文章

Java Web开发模式

一 Java Web开发模式的变迁 1 最初的Java web服务器端编程技术是Servlet,利用Servlet就可以开发出一个Web应用程序. 2 为了解决Servlet缺陷,SUN推出了JSP技术.但是开发人员又走向了另一个极端就是完全放弃了Servlet. 在JSP页面混合使用HTML标记和java代码编写的脚本元素标记来开发Web程序.采用这种方法虽然可以编写JSP页面变得简单,直观,然而,他只适合于业务流程简单,系统规模较小的应用系统. 如果系统较大的话,就会出现两个严重的缺点: 1

笔记 - web开发模式

JavaBean JavaBean,  咖啡豆. JavaBean是一种开发规范,可以说是一种技术. JavaBean就是一个普通的java类.只有符合以下规定才能称之为javabean: 1)必须提供无参数的构造方法 2)类中属性都必须私有化(private) 3)该类提供公开的getter 和 setter方法 JavaBean的作用: 用于封装数据,保存数据. 访问javabean只能使用getter和setter方法 JavaBean的使用场景: 1)项目中用到实体对象(entity)符

基于Web开发模式的信息抽取

基于Web 开发模式的信息抽取 信息抽取是一个互联网自然语言处理的一个首要环节,信息抽取的准确度会直接影响到后续的处理.信息抽取的目标是去除噪音,获取网页有价值的信息如网页的标题.时间.正文.链接等信息.   主流算法介绍 网页信息抽取的方法有很多,比如从算法上分:基于模板的,基于信息量.基于视觉的.基于语义挖掘的.基于统计的.从HTML 处理上分为:基于行块.基于DOM 树.下面我逐一介绍. 1.     基于模板,一般由人工维护一个URL 和HTML 的模板.当URL 匹配到某个URL 模板

web开发模式小结:页面乱码和跳转

本文由付老师总结书写 java开发模式: (1)第一种开始模式:javaBean+jsp : 优点:可以为web程序在jsp中减少java代码量 适用于该开发模式的jsp的动作元素:<jsp:usebean id= class=> :相当于实例化bean对象 <%= id.get/set%> <jsp:setProperty property="" name="usebean中的id" value param> :value和pa

javaWeb中servlet开发(5)——WEB开发模式:Mode I与Mode II

1.servlet开发 2.model I模式 客户端通过访问JSP,调用里面的javabean,而通过javabean调用处理数据库的操作,javabean中有专门处理数据库的操作,数据库主要以DAO为主,出去了数据库外也包含业务处理. 3.model II 开发模式 servlet特点:可以接收用户的请求,还可以调用Java程序,由于本身就是以Java程序运行的,所以肯定要比jsp性能高,而且安全性能高. 最终,servlet所有的操作内容都有交个jsp显示,这样一来,servlet缺点就避

java web 开发模式

1.Model1 javaBean+jsp:jsp直接操作数据库,不安全,开发维护复杂 2.Model2:MVC 原理:把Model1的操作javaBean操作抽取为控制层 实现:控制层使用servlet来实现,视图用jsp实现,模型用javaBean来实现 优点:彻底分离业务逻辑和表现逻辑,也就是分离dao层和jsp,servlet控制页面跳转

JavaWeb学习笔记——Web开发模式:Mode I和Mode II

Ajax与传统Web开发的异同

 传统web开发模式 传统的Web应用交互由用户触发一个HTTP请求到服务器,服务器接收并对其进行处理后再返回一个新的HTML页到客户端.每当服务器处理客户端提交的请求时,客户都只能空闲等待,哪怕只是一次很小的交互.只需从服务器端得到很简单的一个数据,都会返回整个的HTML页,所以用户每次都要浪费时间和带宽去重新读取整个页面,这个做法不但浪费了许多带宽,由于每次应用的交互都需要向服务器发送请求,响应时间就依赖于服务器的响应时间,这也就导致了用户界面的响应比本地应用慢得多. 工作原理图 数据交

快速使用node.js进行web开发

首先关于node.js的学习,这里推荐一本比较好的教程,nodejs web开发指南,该书通俗易懂地将node.js语言特性讲解完之后,又从一个项目角度带领读者使用node.js学习web开发.相信这是一个比较好的学习模式和过程.由于这本书是2012年出的,书中的一个web教学项目是开发一个微博.从2012到现在,node.js及其生态环境发生了很大改变,所以关于该书的学习如果照着书本显然是过于陈旧的.到目前为止,node.js的web开发框架已经升级到了Express4.12.1,对于Mong