JavaWeb开发技术—MVC开发模式—代码分层—0001

【JavaWeb】MVC分层开发 JavaWeb笔记 day04 2019/9/7 周六 学习内容:MVC分层开发 MVC分层开发 1.什么是MVC 一个网站的开发,不可能是一个或者仅几个人就能写出来的,网站一般采用分层开发的方式,不同的开发人员负责不同的层,可以同时写代码,程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上,使开发时间得到相当大的缩减。分离视图层和业务逻辑层... 阅读详情

MVC开发模式的重要概念及在项目中的使用:

1.什么是MVC开发模式

2.为啥要使用MVC模式

3.如何在项目使用MVC模式

本文中加粗红色最好熟记 

什么是MVC开发模式:

为啥要使用MVC模式 :

       MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离、分层。它主要分模型、视图、控制器三层,其中M代表业务逻辑层,也就是软件开发的功能;V代表视图层,也就是使用什么组件显示数据,常用的就是HTML、和JSP等文件;而C代表控制层,代表软件的大方向的执行流程以及使用哪个视图对象将数据展示给用户。所以MVC就是将不同功能的组件进行隔离与分层,从而有利于程序的模块化开发、代码的后期维护。

提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。

为了进一步说明使用MVC的理由:通过一个简单案例加深下印象

不使用MVC开发web项目,对代码不层的效果如何呢?

案例目录结构:(用户登录案例)

主要的演示代码:

index.jsp

<%@page language="java" import="java.util.*,java.sql.*" 
	pageEncoding="utf-8"%>
<!doctype html public "-//w3c//dtd html 4.01 Transitional//EN">
<html>
	<head>
		<title>No MVC</title>
	</head>
	<body>
		<%
			boolean isLoginSuccess = false;//逻辑标记
			//准备数据库参数
			String url = "jdbc:mysql://localhost:3306/demo";
			String driverName = "com.mysql.jdbc.Driver";
			String username = "root";
			String password = "1234";
			//加载驱动
			Class.forName(driverName);
			Connection connection = DriverManager.getConnection(url, username, password);
			//查询数据
			String sql = "select * from user where username=? and password=? ";
			PreparedStatement ps = connection.prepareStatement(sql);
			ps.setString(1, "张三");
			ps.setString(2, "111");
			ResultSet rs = ps.executeQuery();
			//逻辑判断
			while(rs.next()){
				isLoginSuccess = true;
			}
			rs.close();
			ps.close();
			connection.close();
			
			//跳转控制
			if(isLoginSuccess){
				response.sendRedirect("login?status="+1);
				
			}else{
				response.sendRedirect("no.jsp?status="+0);	
			}
		%>
	</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>NO-MVC-Model-001</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.dk.web.UserLogin</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
</web-app>

ok.jsp

<%@page language="java" import="java.util.*,java.sql.*" 
	pageEncoding="utf-8"%>
<!doctype html public "-//w3c//dtd html 4.01 Transitional//EN">
<html>
	<head>
		<title>No MVC-ok</title>
	</head>
	<body>
		<h1>ok</h1>
	</body>
</html>

no.jsp

<%@page language="java" import="java.util.*,java.sql.*" 
	pageEncoding="utf-8"%>
<!doctype html public "-//w3c//dtd html 4.01 Transitional//EN">
<html>
	<head>
		<title>No MVC-no</title>
	</head>
	<body>
		<h1>no</h1>
		状态值:<h2><%=request.getParameter("status") %></h2>
	</body>
</html>

UserLogin.java

package com.dk.web;

import java.io.IOException;

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

public class UserLogin extends HttpServlet {
	
	@Override
	protected void service(HttpServletRequest req,
			HttpServletResponse resp) throws ServletException, IOException {
			System.out.println("service========================>>>>>>>>>>>>>>>");
			System.out.println(req.getParameter("status"));
			
			req.setAttribute("user", "Jack");
			req.getRequestDispatcher("/WEB-INF/index.jsp").forward(req, resp);
			
	}

}

加载项目到Tomcat后,启动Tomcat运行程序:

录入请求路径:http://localhost:8080/NO-MVC-Model-001/login

如果没有异常并且查询到用户记录后,页面效果:

如果存在异常或没有用户记录,页面效果:

你会发现,以上开发代码login.jsp中里面包含很多功能的代码,这样设计虽然在软件开发初期使项目的开发进度加快。但后期的维护量非常庞大,开发中需求变更时代码的修改也很吃力,所以的功能代码混杂在一起就像一团乱麻。所以就要对代码进行分层,

M层使用JavaBean服务组件,V层可以使用JSP文件只显示数据, C层可以使用Servlet或其他的框架组件。

 


 使用MVC构建的项目目录结构:

具体代码细节:

Userinfo.java

package entity;
public class Userinfo {

	private String id;
	private String username;
	private String password;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

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

}

GetConnection.java

package dbtools;

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

public class GetConnection {

	public static Connection getConnectionFromJDBC()
			throws ClassNotFoundException, SQLException {

		String url = "jdbc:mysql://localhost:3306/demo";
		String driverName = "com.mysql.jdbc.Driver";
		String username = "root";
		String password = "1234";

		Class.forName(driverName);
		Connection connection = DriverManager.getConnection(url, username,
				password);
		return connection;
	}

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		System.out.println(getConnectionFromJDBC());
	}
}

UserinfoDao.java

package dao;

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

import dbtools.GetConnection;
import entity.Userinfo;

public class UserinfoDao {

	public Userinfo findUserinfo(String username, String password)
			throws SQLException, ClassNotFoundException {
		System.out.println("DAO________findUserinfo_____"+username+":"+password+"________>>>>>");
		Userinfo userinfo = null;
		String sql = "SELECT * FROM USER WHERE username=? AND PASSWORD=?";
		Connection connection = GetConnection.getConnectionFromJDBC();
		PreparedStatement ps = connection.prepareStatement(sql);
		ps.setString(1, username);
		ps.setString(2, password);
		ResultSet rs = ps.executeQuery();
		
		while (rs.next()) {
			String iddb = rs.getString("id");
			String usernamedb = rs.getString("username");
			String passworddb = rs.getString("password");

			userinfo = new Userinfo();
			userinfo.setId(iddb);
			userinfo.setUsername(usernamedb);
			userinfo.setPassword(passworddb);

		}
		rs.close();
		ps.close();
		connection.close();

		return userinfo;
	}
}

UserinfoService.java


import java.sql.SQLException;

import dao.UserinfoDao;

public class UserinfoService {

	public boolean login(String username, String password) throws SQLException,
			ClassNotFoundException {
		UserinfoDao userinfoDao = new UserinfoDao();
		if (userinfoDao.findUserinfo(username, password) == null) {
			return false;
		} else {
			return true;
		}
	}

}

login.java

package controller;

import java.io.IOException;
import java.sql.SQLException;

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

import service.UserinfoService;

public class login extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("doPost===============================>>>>>>>>>>");
		request.setCharacterEncoding("utf-8");
		try {
			String username = request.getParameter("username");
			String password = request.getParameter("password");
			
			UserinfoService usRef = new UserinfoService();
			if (usRef.login(username, password) == true) {
				response.sendRedirect("ok.jsp");
			} else {
				response.sendRedirect("no.jsp");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>login</servlet-name>
    <servlet-class>controller.login</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
	</head>
	<body>
		<form action="login" method="post">
			username:
			<input type="text" name="username">
			<br />
			password:
			<input type="text" name="password">
			<br />
			<input type="submit" value="登陆">
		</form>
	</body>
</html>

no.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<body>
		no.jsp
	</body>
</html>

ok.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<body>
		ok.jsp
	</body>
</html>

运行项目工程后:

1.如果一切正常,页面效果:

2.如果存在异常或无记录,页面效果:

2024年JavaWeb开发技术—MVC开发模式—代码分层—0001,最新Java高级面试题汇 本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取inlogin/loginindex.jsp[外链图片转存中…(img-4JSux6EO-1714841128828)][外链图片转存中…(img-ivLclTDI-1714841128828)]本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录。 阅读详情

相关推荐

JavaWeb POI 导出Excel

刚开始实习没有多久,现在公司有个需求:将数据库当中的数据以Excel表格的形式导出来,以前从来没有做过这样子的东西,自己也不会做,怎么办?然后就上网找了一些资料,看看别人写的博客,搞了几个小时,终于搞出来了,顿时心里就有一点小小的成就感,好开心!也顺便把数据导出Excel的过程记录一下,给一些有需要的人参考一下,也给自己以后积累一点经验。 这里我要说明一下:我公司采用的是Spring,Struts2,MyBatis三大框架的,而且我公司项目做完之后的信息展示页面有点复杂,为了方便讲解,我这里采用的是Spr

446

MVC思想、Spring层级代码、AOP

MVC思想、Spring层级代码、AOP

qq_44840708的博客 1794

基于Spring Boot+Vue的医院预约挂号系统:高并发号源处理与支付集成实战

在构建现代Web应用时,高并发场景下的数据一致性是核心挑战之一,其原理通常涉及缓存、原子操作与最终一致性方案。这一技术价值在于保障系统在高流量下的稳定与公平,广泛应用于电商秒杀、票务预订等场景。本文聚焦于医院预约挂号这一典型民生应用,深入探讨如何利用Redis的原子操作(如DECR)解决号源“超卖”问题,并结合Spring Boot、MyBatis-Plus等技术栈,实现从预约、支付到订单管理的完整业务流程。通过集成支付宝支付接口与JWT无状态认证,项目展示了企业级应用在安全交易与用户权限控制方面的工程实践

ctpaknc9526的博客 292

Javaweb MVC设计模式、Modle发展史、项目分层和三层架构

文章目录项目分层三层架构 项目分层 DAO —— Data Access Object数据访问对象(接口) DAOImpl —— DAO的实现类 entity ——数据对象的实体(有些地方叫model层) Service(不是Server)——就是中间层、业务逻辑层(接口) ServiceImpl —Service的实现类 Util —— 自定义工具类 Servlet——JAVA WEB小应用(有时叫Controller层) 1、Utils:主要用于存放连接工具如java数据库连接工具,在这里提供连接和

qq_43573663的博客 2961

java swing mvc设计模式 分层思想 自助订餐系统

此项目是用java swing编写的桌面应用程序,采用mvc设计模式进行分层,所使用的数据从xml文件读取,下载后可直接导入到工作空间运行

SiC MOSFET驱动设计实战:从特性解析到电路优化

本文深入解析SiC MOSFET的核心特性及其驱动电路设计要点,涵盖高温稳定性、快速开关能力等关键特性,并提供驱动电压配置、电流能力计算、布局优化等实用方案。特别针对第三代电力电子半导体SiC MOSFET的驱动要求,分享STGAP1AS等典型驱动方案的应用技巧,助力工程师解决高频应用中的EMI和热管理挑战。

weixin_29230865的博客 366

Spring中DAO层、Service层、Controller层的定义

1、dao层 dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,dao层的设计首先是设计dao层的接口,然后在Spring的配置文件中定义此接口的实现类,就可以在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,dao层的数据源配置,以及有关数据库连接参数都在Spring配置文件中进行配置。 2、service层 service层...

JavaPorter的博客 3512

GD32测量pwm波频率以及占空比

1、需求 最近做的一个项目,其中有一个传感器输出是pwm波形,频率代表速度,频率越高速度越快。不同的占空比代表不同的故障类型。占空比10%~90%,频率范围20hz ~1khz。 基于以上的需求,单片机要实现两个功能: 1、测量频率 2、测量占空比 这怎么玩呢?从没搞过啊。 2、需求分析 经过查找资料以及参考正点原子的教程,发现单片机的定时器的输入捕获功能能够实现该功能。 2.1分析 如上图所示,测量占空比和测量频率实际上就是测量波形的长度。 对于占空比,就是测量T2与T1时刻的差值 对于频率,就是测量T

Jack Yi的博客 9071

超详细讲解SpringMVC三层架构

SpringMVC三层架构 Java SpringMVC的工程结构一般来说分为三层,自下而上是Modle层(模型,数据访问层)、Cotroller层(控制,逻辑控制层)、View层(视图,页面显示层),其中Modle层分为两层:dao层、service层,MVC架构分层的主要作用是解耦。采用分层架构的好处,普遍接受的是系统分层有利于系统的维护,系统的扩展。就是增强系统的可维护性和可扩展性。 对于Spring这样的框架,(View\Web)表示层调用控制层(Controller),控制层调用业务层(Ser

m0_59234718的博客 2万+

【物联网】探索NE555:一款经典的集成电路(超详细)

NE555是一种集成电路,其内部结构包括比较器、RS触发器、电压比较器和输出级三个主要功能模块,外部引脚则提供了与其他电路元件进行连接的接口。NE555的设计目的是为了提供一种简单方便的定时器解决方案,它广泛应用于模拟和数字电路中。NE555作为一款经典的集成电路,具备设计简单、易于使用和稳定可靠的特点,在电子领域发展了广泛的应用。从单稳态模式到多稳态模式,再到振荡器模式,NE555可以满足不同的需求,并且可以与其他电路元件灵活组合,扩展其功能。然而,需要注意的是NE555也有一些限制。

Goforyouqp的博客 6万+

直流并联电压源的下垂控制与模拟光伏板特性的方法与仿真

并联直流电源下垂控制方法,下垂特性可以让并联直流电源输出功率/电流自动均衡,直流电源输出特性模拟光伏板的输出特性,具有自动限制输出最大功率的功能

1197

java横向导出excel_JavaWeb POI 导出Excel

刚开始实习没有多久,现在公司有个需求:将数据库当中的数据以Excel表格的形式导出来,以前从来没有做过这样子的东西,自己也不会做,怎么办?然后就上网找了一些资料,看看别人写的博客,搞了几个小时,终于搞出来了,顿时心里就有一点小小的成就感,好开心!也顺便把数据导出Excel的过程记录一下,给一些有需要的人参考一下,也给自己以后积累一点经验。这里我要说明一下:我公司采用的是Spring,Struts2...

weixin_39820158的博客 497

二维码扫描与页面跳转的完整流程解析

本文详细解析了二维码扫描与页面跳转的完整流程,从核心原理到前后端实现,涵盖了二维码生成、扫码事件处理、后端验证机制及跳转逻辑等关键环节。特别介绍了如何使用qrcode.js生成二维码、WebSocket处理扫码状态以及JWT令牌验证设计,帮助开发者构建安全高效的扫码跳转系统。

cicd6pipeline的博客 1089

基于javaweb和mysql的ssh超市进销存管理系统超市管理系统(java+hibernate+struts+jsp+mysql)

基于javaweb和mysql的ssh超市进销存管理系统超市管理系统(java+hibernate+struts+jsp+mysql)基于javaweb的SSH超市进销存管理系统超市管理系统(java+hibernate+struts+jsp+mysql)eclipse/idea/myeclipse/sts等均可配置运行。课程设计,大作业,毕业设计,项目练习,学习演示等。

毕业javaweb,一直在线,欢迎私信 267

基于Transformer的股票市场多因子量化选股模型,深度解析:基于Transformer的股票市场多因子量化选股模型

传统多因子模型通常采用线性回归、岭回归或Lasso回归来估计因子权重,其核心假设是因子与未来收益之间存在线性关系。然而,现实中的股票市场具有典型的非线性、非平稳和高噪声特征。卷积神经网络(CNN)擅长提取局部特征,但难以捕捉全市场股票之间的全局依赖关系;循环神经网络(RNN)及其变体LSTM虽然能处理时间序列,但存在梯度消失问题且难以并行计算。Transformer的self-attention机制能够:直接建模任意两只股票之间的相关性动态计算因子权重而非静态线性组合。

YOLO 250

详解AUTOSAR:DaVinci Configurator配置CAN和UART数据协议解析器(RH850)(实战篇—1)

通过学习本篇博文项目,将会把所学的DaVinci Configurator知识系统串联起来。

不脱发的程序猿 2811

关于javaweb pawj系统

package com.pinganwj.clinic.web.test.controller; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.s

zyz503386123的博客 621

(持续更新中!)详解【计算机类&面试真题】军队文职考试 ——第一期(真题+解析)| TCP、UDP的区别;程序局部性;ICMP协议及主要功能;重定位所需的计算机硬件

在当今信息化时代,军队中对于计算机专业人才的需求与日俱增。因此,了解面试和复试中常见的问题和要求对于准备应聘者来说至关重要。本文将围绕面试的准备要点、常见问题以及面试技巧进行探讨,并提供一些建议和经验。通过了解面试和复试的准备要点、常见问题以及技巧,读者将能够提升应对能力和成功率。本文为准备军队文职面试和计划考研复试的读者提供了有价值的参考和指导。通过阅读本篇博客,读者将能够获得关于军队文职计算机类面试和计算机考研复试的全面了解,提升自身的应对能力和成功率。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1690

Servlet复习(S2)

  Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /*

day day up 1392

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 订餐系统,一种基于Android平台手机订餐系统的实现方法

一种基于Android平台手机订餐系统的实现方法【技术领域:】[0001]本发明涉及一种手机订餐系统,能够通过手机上的Android软件实现订餐。【背景技术:】[0002]目前已有的网上订餐系统大多是基于B/S(B1wser/Server,浏览器/服务器)模式,用户必须拥有电脑才能进行网上订餐,对用户的限制太多,发明的这款Android手机订餐软件弥补了传统的方式的许多缺点,如携带方便、功能全面、...

weixin_35569211的博客 1019

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基于SSM框架开发的宿舍管理系统JavaWeb项目源码

今天Java潘老师给大家介绍一个基于SSM框架开发的宿舍管理系统项目,该项目课题比较贴合学生时代大家的校园生活,也是很多学生在做毕业设计或者大作业时选择的课题,那么下面我们来一起看下这个项目吧。

Java潘老师 318

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Struts1.x系列教程(21):使用MappingDispatchAction类调用不同的Action方法

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:Struts1.x系列教程(20):使用EventDispatchAction类处理一个form多个submit 与LookupDispatchAction、DispatchAction不同,MappingDispatchAction类并不通过请求参数来指定动作,而是将一个Struts动作对应于一个Action方法。下面的例子演示了如...

keke1314520的博客 112

javaEE练习(商城练习)

今天写一个商城的练习,综合之前学习过的servlet和el表达式,来一个综合的练习; 需要用到的数据库有: /* Navicat MySQL Data Transfer Source Server : localhost Source Server Type : MySQL Source Server Version : 50718 Sou...

weixin_30470857的博客 355

[Java]Java分层概念(转)

[Java]Java分层概念(转) service是业务层 action层即作为控制器 DAO(Data Access Object) 数据访问 1.JAVA中Action层,Service层,modle层和Dao层的功能区分?(下面所描述的service层就是biz) 首先这是现在最基本的分层方式,结合了S...

weixin_30376083的博客 332
上一篇: SpringSecurity学习记录__HelloWorld案例__01
下一篇: Spring框架系列_创建HelloWorld项目_纯净版(一)
Coder_Boy_
博客等级 码龄10年 2804粉丝 819原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值