java服务器端开发-servlet:3_4、Servlet使用jdbc访问数据库:重定向

Servlet 数据库访问 JDBC 是 Java 提供的一种用于数据库访问的 API。它允许 Java 程序通过 JDBC 驱动程序与各种数据库进行连接和操作。JDBC 提供了丰富的接口和类,使得数据库访问变得简单而高效。Servlet 数据库访问是 Java Web 应用程序中不可或缺的一部分。通过 JDBC API,Servlet 可以方便地与各种数据库进行交互。本文介绍了 JDBC 的基本概念、连接数据库的方法、执行 SQL 语句以及异常处理等知识,希望能对您有所帮助。 阅读详情

目录

一、前言

二、重定向介绍

三、重定向操作

1、修改 AddEmpServlet.java 文件

2、效果说明

3、修改后,完整的 AddEmpServlet.java 文件

四、员工列表页:添加表头、某个字段居中

1、修改 ListEmpServlet.java 文件

2、效果说明

3、修改后,完整的 ListEmpServlet.java 文件

五、其他代码

1、配置文件 web.xml 

2、html 表单提交代码:addEmp.html


一、前言

上一篇文章我们介绍了循环查询添加员工信息,详见可参考博文:原创 java服务器端开发-servlet:3_3、Servlet使用jdbc访问数据库:循环查询添加员工信息 这篇文章我们将介绍一下重定向操作

二、重定向介绍

有关重定向,这篇博文有简单介绍:原创 java服务器端开发-servlet:3、Servlet使用jdbc访问数据库、mysql的简单使用、重定向

重定向需要注意的两个问题: 1)重定向之前,不能够调用out.close方法。  2)重定向之前,会先清空response上缓存的数据。

那么为什么呢?有关深入介绍以后再讲,我们先来看看代码操作

三、重定向操作

我们基于上篇文章的案例进行修改,复制 web03 重命名为 web04,

怎么复制重命名,上篇文章有讲到,这个就不多讲了。

1、修改 AddEmpServlet.java 文件

只需把 AddEmpServlet.java 文件修改一下即可,关键代码如下:

			/*
			show对应web.xml的“<url-pattern>/show</url-pattern>”
			它也可以是一个html,如:ListEmpServlet类调用了addEmp.html
			out.println("<a href='addEmp.html'>添加新员工</a>");
			*/
			//out.println("<a href='show'>"+"查看雇员</a>");
			
			//重定向操作
			//上面注释代码,需要点击跳转。重定向不需要点击,自动跳转
			response.sendRedirect("show");
			//out.close();//不写此代码: 此流,容器会自动关掉。

2、效果说明

上面这样修改以后,点击“提交”,

“插入成功 查看雇员” 这个界面,将直接自动跳转到员工信息列表页,无需点击“查看雇员”

3、修改后,完整的 AddEmpServlet.java 文件

package t08_循环查询添加员工信息_重定向;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 员工信息插入mysql【主要功能】
 * @UpdateTime:2011年02月28日 下午17:30:00
 * @ProjectName: 【项目名】
 * @ClassName:【类名】
 * @CategoryName:【类型】如:Activity
 * @author:luminal、邮箱 luminal_yyh@163.com
 * @since 1.0【版本】
 * @Description:(可以在这里描述这个类的作用)
 */
public class AddEmpServlet extends HttpServlet{
	public void service(HttpServletRequest request,
			HttpServletResponse response) 
	throws ServletException,IOException{
		
		request.setCharacterEncoding("utf-8");
		
		//读请求参数
		String name = request.getParameter("name");
		String salary = request.getParameter("salary");
		String age = request.getParameter("age");
		
		//服务端验证一定要有,此处省略...
		response.setContentType(
				"text/html;charset=utf-8");
		PrintWriter out = response.getWriter();

		
		//将员工信息插入数据库【详见JDBC知识点】
		//首先要在mysql里面,建数据库jsd1308db,
		//建表t_emp,才能进行如下操作【mySql建库、表,详见文档】
		Connection conn = null;
		PreparedStatement prep = null;
		try {
			//Class.forName("com.mysql.jdbc.Driver"); //提示被弃用
			Class.forName("com.mysql.cj.jdbc.Driver");
			conn = 
				DriverManager.getConnection(
						"jdbc:mysql://localhost:3306/jsd1108db",
						"root","你的mysql密码");
			prep = 
				conn.prepareStatement("insert into " +
						"t_emp(name,salary,age) " +
						"values(?,?,?)");
			prep.setString(1, name);
			//salary写成sal,报NullPointerException
			//执行后面的-->"系统繁忙,稍后重试"
			prep.setDouble(2, Double.parseDouble(salary));
			prep.setInt(3, Integer.parseInt(age));
			prep.executeUpdate();
			
			out.println("插入成功");
			
			/*
			show对应web.xml的“<url-pattern>/show</url-pattern>”
			它也可以是一个html,如:ListEmpServlet类调用了addEmp.html
			out.println("<a href='addEmp.html'>添加新员工</a>");
			*/
			//out.println("<a href='show'>"+"查看雇员</a>");
			
			//重定向操作
			//上面注释代码,需要点击跳转。重定向不需要点击,自动跳转
			response.sendRedirect("show");
			//out.close();//不写此代码: 此流,容器会自动关掉。
			

		} catch (Exception e) {
			//记日志
			e.printStackTrace();
			//判断异常是否能恢复,如果
			//能够恢复,立即恢复;如果不能够
			//恢复(系统异常,比如数据库服务暂停,
			//连接数据库的网络中断),则提示用户稍后重试。
			out.println("系统繁忙,稍后重试");
		}finally{
			if(prep != null){
				try {
					prep.close();
				} catch (SQLException e) {
					//一定不执行,所以日志都没打印了
					}
			}
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					
					}
			}
		}
		
		
		
	}
}

四、员工列表页:添加表头、某个字段居中

1、修改 ListEmpServlet.java 文件

为了方便查看,我们可以添加一个表头,也可以尝试让 某个字段居中,修改的关键代码如下:

			//使用查询得到的结果,生成一个表格
			out.println("<table border='1' width='60%' " +
					"cellpadding='0' cellspacing='0'>");
//			out.println("<tr><td>ID</td><td>姓名</td>" +
//					"<td>薪水</td><td>年龄</td></tr>");
			
			//表头
			out.println("<caption>"+"员工信息表"+"</caption>");
			//id 在中间,其它可类似
			out.println("<tr>" + "<td align='center'>ID</td>" + "<td>姓名</td>" + "<td>薪水</td>"
					+ "<td>年龄</td></tr>");

2、效果说明

即效果如下:相对之前加了个表头,ID 字段居中了

3、修改后,完整的 ListEmpServlet.java 文件

package t08_循环查询添加员工信息_重定向;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 查询mySql里面的员工数据【主要功能】
 * @UpdateTime:2011年02月28日 下午17:30:00
 * @ProjectName: 【项目名】
 * @ClassName:【类名】
 * @CategoryName:【类型】如:Activity
 * @author:luminal、邮箱 luminal_yyh@163.com
 * @since 1.0【版本】
 * @Description:(可以在这里描述这个类的作用)
 * 步骤:
 * 1、测试地址:
 * http://localhost:8080/web04/show
 * 2、查询以后,插入。那么插入成功以后,怎么返回到查询的页面。
 * 点击跳转。或 自动跳转“重定向”(后面介绍)
 */
public class ListEmpServlet extends HttpServlet{
	public void service(HttpServletRequest request,
			HttpServletResponse response) 
	throws ServletException,IOException{
		
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		Connection conn = null;
		PreparedStatement prep = null;
		ResultSet rst = null;
		try {
			//Class.forName("com.mysql.jdbc.Driver"); //提示被弃用
			Class.forName("com.mysql.cj.jdbc.Driver");
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/jsd1108db",
					"root","你的mysql密码");
			prep = conn.prepareStatement(
					"select * from t_emp");
			rst = prep.executeQuery();
			
			//使用查询得到的结果,生成一个表格
			out.println("<table border='1' width='60%' " +
					"cellpadding='0' cellspacing='0'>");
//			out.println("<tr><td>ID</td><td>姓名</td>" +
//					"<td>薪水</td><td>年龄</td></tr>");
			
			//表头
			out.println("<caption>"+"员工信息表"+"</caption>");
			//id 在中间,其它可类似
			out.println("<tr>" + "<td align='center'>ID</td>" + "<td>姓名</td>" + "<td>薪水</td>"
					+ "<td>年龄</td></tr>");
			
			while(rst.next()){
				int id = rst.getInt("id");
				String name = rst.getString("name");
				double salary =rst.getDouble("salary");
				int age = rst.getInt("age");
				
				out.println("<tr><td>" + id 
						+ "</td><td>" + name 
						+ "</td><td>" + salary 
						+"</td><td>" + age 
						+ "</td></tr>");
				
			}
			out.println("</table>");
			
			out.println("<a href='addEmp.html'>添加新员工</a>");
			
		} catch (Exception e) {
			e.printStackTrace();
			out.println("系统繁忙,稍后重试");
		}finally{
			if(rst != null){
				try {
					rst.close();
				} catch (SQLException e) {
				}
			}
			if( prep != null){
				try {
					prep.close();
				} catch (SQLException e) {
				}
			}
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
				}
			}
		}
	}
	
}

五、其他代码

其他代码其实没做什么修改,只是改了改名字对应上就行了,为了方便查看参照直接贴代码了

1、配置文件 web.xml 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	
	<display-name>web04</display-name>
	
	<!-- t08_循环查询添加员工信息_重定向 -->
	<!-- 查询员工信息 -->
	<servlet>
		<servlet-name>showFormEmp</servlet-name>
		<servlet-class>t08_循环查询添加员工信息_重定向.ListEmpServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>showFormEmp</servlet-name>
		<url-pattern>/show</url-pattern>
	</servlet-mapping>

	<!-- 添加员工信息 -->
	<servlet>
		<servlet-name>addEmp</servlet-name>
		<servlet-class>t08_循环查询添加员工信息_重定向.AddEmpServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>addEmp</servlet-name>
		<url-pattern>/add</url-pattern>
	</servlet-mapping>
	
</web-app>




2、html 表单提交代码:addEmp.html

<html>
<head>
	<!-- 模拟一个消息头(content-type) content里面内容:“文本/网页,字符编码”-->
	<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<!-- body定义总体样式 -->
<body style="font-size:18px; font-style:fond; color:red; ">
	<!-- action="add",对应web.xml中标签url-pattern里的"/add" -->
	<form action="add" method="post">
		<fieldset>
			<legend>录入员工信息</legend>
				姓名:<input name="name" /><br />
				薪水:<input name="salary" /><br />
				年龄:<input name="age" /><br />
				<input type="submit" value="提交" />
		</fieldset>
	</form>
</body>
</html>

 

 

 

全面掌握Servlet、JDBC、JSP实战源代码 Servlet是Java语言编写的服务器端程序,它的主要功能在于交互式地浏览和修改数据,生成动态Web内容。其特点包括平台独立性,可扩展性和可维护性。Servlet通过请求-响应模型与客户端交互,适用于处理客户端请求并生成动态内容,它运行于服务器端的Servlet容器中。JSP定义了一组内置对象,它们可以直接在JSP页面中使用,无需创建实例。这些对象包括requestresponsesessionconfigout和page。request。 阅读详情

相关推荐

告别偏移地址!用C# S7PLUS驱动读写西门子S7-1500符号地址(TIA Portal V17+环境配置)

本文详细介绍了如何在TIA Portal V17+环境中使用C# S7PLUS驱动读写西门子S7-1500 PLC的符号地址,告别传统的偏移地址方式。通过配置OpenSSL、集成S7PLUS驱动库,以及实战案例展示符号地址的读写方法,显著提升代码可读性和维护效率。文章还涵盖了环境准备、高级配置及常见问题解决方案,助力工业自动化开发者实现更高效的PLC通讯。

weixin_28720767的博客 318

servlet3与servlet4区别和实现

一、servlet3 记得servlet3的特性有以下几点: 1、异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。 2、新增...

点点的博客 8671

PLDM实战解析:传感器与效应器在智能监控系统中的应用

本文深入解析了PLDM(平台级数据模型)中传感器与效应器两大核心组件在智能监控系统中的应用。传感器负责感知硬件状态,分为数值型与状态型,提供精准的“体检报告”;效应器则负责执行控制指令,实现从监控到操作的闭环。文章通过实战案例,阐述了如何利用这些标准化组件构建高效、自动化的智能监控系统,并探讨了平台描述记录与事件机制等关键技术。

k6l7m8n9的博客 874

Servlet3与Servlet4

Servlet3 Servlet 3.0 新特性 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。 新增的注解支持:...

NickWU博客 4746

ios生成海报使用dom-to-image中toPng报错isTrusted:true

主要是ios中safari浏览器解析错误,引起的报错,主要引起原因toPng会调用toSvg,toSvg直接将html标签内容通过svg中foreignObject标签直接包裹,然后转base64, 通过data:image/svg+xml;解决办法:二次生成(调用两次),判断ios or 安卓,生成第一次生成,不用参数,例如:scale: 3,在第二次生成再进行清晰度操作,避免多次生成,引起性能消耗。以上种种很多案例,使用canvase进行转换的,标签丢失,直接toPng版本的,兼容性问题。

weixin_44601570的博客 2105

基于Spring Boot框架的网上蛋糕销售系统

随着互联网的普及和电子商务的迅猛发展,网上购物已经成为人们日常生活的一部分。蛋糕作为一种受欢迎的食品,其销售市场也逐渐向网络化方向发展。网上蛋糕销售系统能够打破时间和地域的限制,让消费者随时随地浏览和购买蛋糕,同时也为蛋糕商家提供了一个展示和销售产品的平台。该系统的开发旨在提高蛋糕预定和销售的便捷性,节约时间和经济成本,并推动蛋糕市场的进一步发展。开发语言:Java,一种面向对象的编程语言,具有跨平台性、稳定性和安全性等特点,适用于构建大型、复杂的Web应用程序。 框架:Spring Boot,一个基于Sp

2301_81127431的博客 997

Java Web 03 (页面跳转&JDBC)

今日思维导图: 一、页面跳转方式(两种) 1、重定向 response :response.sendRedirect("success.jsp"); 2、请求 request :request.getRequestDispatcher("success.jsp").forward(request, response); 两者之间的关系: 两者之间的区别: //页面跳转方式 //1、重定向语法response ①能够将页面跳转,并且地址栏发生转变,但是不能将值传递到下一个页面 ③能...

m0_67094505的博客 2160

飞牛fnNAS搭建Web网页版OFFICE(WPS)软件

本文介绍了如何在飞牛NAS上通过Docker容器部署WPS Office办公软件。主要内容包括:启用Docker服务、准备项目文件夹结构、使用Compose方式构建容器、解决端口冲突问题、配置中文输入法和字体库,以及通过ZeroTier实现远程访问。文章详细说明了每个步骤的操作方法,包括容器启动、输入法设置、字体添加和文件存储位置配置。最后还介绍了使用ZeroTier内网穿透技术实现远程访问NAS上WPS服务的方法,让用户可以在不同设备上随时编辑NAS中的文件。整个部署过程完整清晰,为NAS用户提供了便捷的

dgnankai的专栏 1702

Servlet 4

简单的Servlet, 但是一定要记住的是,Servlet 一共分为三种     简单Servlet,是作为一种程序所必须的开发结构保存下来的    过滤Servlet    监听Servlet    既然是一个Servlet,之前是采用了继承HttpServlet类的形式完成的,但是在过滤器中使用的不再是类而是接口    如果想要完成一个过滤器开发的话,则首先必须让一个类实现Filte

tanyit的专栏 2731

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战

KJ.JK 1419

2021-09-29 每天几个LCEDA小知识——如何交叉选择并阵列放置元器件

立创EDA专业版之交叉选择并阵列放置元器件????交叉选择????阵列放置 ????交叉选择 在原理图界面,先框选需要交叉选择的元器件对象,右键,选择交叉选择(如果熟练之后,直接选择元器件,快捷键Shift+X)。 完成上述操作之后,可以看到自动跳转到PCB绘图界面,并自动选定PCB中相关的元器件,接下来不要取消选择的状态,在相关元器件被选中的情况下,即可开展阵列放置,将这些元器件都放在一个区域,方便PCB画线前的布局工作。 ????阵列放置 在布局菜单栏中,选择分布,选择阵列分布, 在弹出的对话框

l64481000的博客 1465

Servlet详解(四): Servlet3.0新特性详解

Servlet2.5是JavaEE5.0规范,最低运行环境为JDK5.0以及Tomcat5.0。而Servlet3.0是JavaEE6.0规范,最低环境为JDK6.0以及Tomcat7.0。Servlet3.0的新特性主要分为以下几个点: 三大组件基于注解的配置 文件上传API的优化 异步处理 组件可插性 动态注册三大组件 <dependency> <groupId>javax.servlet</groupId> <artifactId>j

Feathers的个人笔记 1099

在 SAP 中,应收票据的收取、到期承兑、贴现均有标准操作路径与事务码,以下按业务场景给出操作步骤、T-code、会计分录(含附 / 不附追索权)

摘要:本文详细介绍了SAP系统中应收票据的全流程处理,包括收款(F-36)、到期承兑(F-34/F-20)和贴现(F-33)的标准操作。重点说明了不同业务场景下的事务码使用、操作步骤及对应的会计分录,特别区分了附追索权与不附追索权贴现的处理差异。同时提供了票据查询(FBL5N)和清账(F-32)的辅助功能指引,并汇总了各业务场景的核心会计分录,为财务人员提供了一套完整的SAP应收票据操作指南。(149字)

金牌架构师 265

java服务器端开发-servlet:3、Servlet使用jdbc访问数据库、mysql的简单使用、重定向

目录 一、前言 二、Servlet使用jdbc访问数据库、重定向 1、使用jdbc访问数据库 step1,添加驱动 step2,要注意异常的处理 2、mysql的简单使用 (1)登录mysql (2)查看当前有哪些数据库 (3)创建一个新的数据库 (4)使用某个数据库 (5)查看当前数据库有哪些表 (6)建表 (7)查询表 3、重定向 (1)什么是重定向? (2...

鲁迷那的专栏—坚持实践后再写出来! 779

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java服务器端开发-servlet:3_5、Servlet使用jdbc访问数据库:删除个人、所有员工信息,重定向到员工列表

一、前言 上几篇文章介绍了如何添加员工数据、查询员工数据、重定向等知识点,详细了解可参考博文: 原创java服务器端开发-servlet:3、Servlet使用jdbc访问数据库、mysql的简单使用、重定向 原创java服务器端开发-servlet:3_1、Servlet使用jdbc访问数据库:增加员工信息插入mysql数据库 原创java服务器端开发-servlet:3_2、Se...

鲁迷那的专栏—坚持实践后再写出来! 587

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

servlet使用JDBC访问数据库

文章目录(1)访问步骤(2)servlet使用JDBC访问数据库 (1)访问步骤 步骤一:将JDBC驱动(.jar文件)放到WEB-INF\lib下 原因:ClassLoader找到字节码文件,然后加载到JVM的方法区中,变成一个对象。Tomcat都有自己的类加载器,会去WEB-INF下面lib中找字节码文件。(jar包中的都是字节码文件.) 步骤二、编写JDBC代码,需要注意异常的处理 (2)...

匿名攻城狮 2738

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java服务器端开发-servlet:3_6、Servlet使用jdbc访问数据库:修改更新员工信息

一、前言 上一篇文章我们介绍了:Servlet使用jdbc访问数据库,如何删除个人、所有员工信息,然后重定向到员工列表,详细可参考博文:java服务器端开发-servlet:3_5、Servlet使用jdbc访问数据库:删除个人、所有员工信息,重定向到员工列表这篇文章我们将介绍Servlet使用jdbc访问数据库:修改更新员工信息 更新中。。。 ...

鲁迷那的专栏—坚持实践后再写出来! 636

java服务器端开发-servlet:3_1、Servlet使用jdbc访问数据库:增加员工信息插入mysql数据库

一、前言 上一篇文章介绍了一些理论知识点:Servlet使用jdbc访问数据库、mysql的简单使用、重定向等。详见可参考博文:原创java服务器端开发-servlet:3、Servlet使用jdbc访问数据库、mysql的简单使用、重定向这篇文章主要介绍案例即Servlet使用jdbc访问数据库:增加员工信息插入mysql数据库 二、增加员工信息插入mysql数据库 既然是入库操作...

鲁迷那的专栏—坚持实践后再写出来! 899

java服务器端开发-servlet:3_2、Servlet使用jdbc访问数据库:查询员工信息

一、前言 上一篇文章我们介绍了Servlet使用jdbc访问数据库:增加员工信息插入mysql数据库,详细可参考博文:原创java服务器端开发-servlet:3_1、Servlet使用jdbc访问数据库:增加员工信息插入mysql数据库 所谓常见之“增删改查”,这篇文章我们来讲讲如何查询员工信息 二、查询个人员工信息 1、配置文件代码:web.xml <?xml vers...

鲁迷那的专栏—坚持实践后再写出来! 799

基于IDEA,Servlet,Tomcat,JDBC创建一个JavaWeb项目

读前须知本人只是大学生在读,写这篇文章也仅仅是记录一下操作,为的是将来忘记的时候能有个参照,如果哪里有错或者不到位的,敬请各位斧正。小弟在这里抱拳了。

Lv15835493019的博客 3907

java服务器端开发-servlet:3_7、Servlet使用jdbc访问数据库:“增删改查”员工信息

一、前言 上几篇文章我们首先介绍了一些Servlet的理论知识,然后依次演示了:Servlet使用jdbc访问数据库、mysql安装配置以及一些简单操作、重定向、“增删改查”员工信息等案例博文,详细可参考相关博文: 原创java服务器端开发-servlet:3、Servlet使用jdbc访问数据库、mysql的简单使用、重定向 原创java服务器端开发-servlet:3_1、Servl...

鲁迷那的专栏—坚持实践后再写出来! 599

java服务器端开发-servlet:3_3、Servlet使用jdbc访问数据库:循环查询添加员工信息

目录 一、前言 二、循环查询添加员工信息 1、配置文件代码:web.xml 2、java代码-查询员工:ListEmpServlet.java 3、html 表格提交代码:addEmp.html 4、java代码-添加员工:AddEmpServlet.java 5、效果演示 (1)下面我们来操作演示一下【查询】 (2)点击“添加新员工”【添加】 (3)填入信息,点击“提交” ...

鲁迷那的专栏—坚持实践后再写出来! 770

Java开发基础:JSP+Servlet+JDBC

1.HTML基础 HTML 教程- (HTML5 标准) 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 可以使用 HTML 来建立自己的 web 站点,HTML 运行在浏览器上,由浏览器来解析。 在本教程中,学习如何使用 HTML 来创建站点。HTML 很容易学习!相信很快可以get它! 推荐一个良心HTML编程软件HBuilder,简单易上手! HTML 常用标签 标题标签 : 段落标签: 超链接: href属性定义链接的路径

巴音布鲁克 1602

Java Web面试题总结(servlet、jsp、jdbc)

Java Web面试题总结(servlet、jsp、jdbc) 1. Servlet的生命周期? Servlet的生命周期:实例化、初始化、处理请求、销毁四个阶段。 这个声明周期由javax.servlet.Servlet接口的init(),service()和destroy方法表达。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destr

weixin_43106312的博客 1088

JDBC在Servlet中的使用

Servlet Servlet是使用应用程序设计接口(API)相关类和方法的Java程序,是位于web服务器的服务器端的Java应用程序。 HTML通过Servlet操作数据库 1.先熟悉一下Servlet的使用 首先IDEA建立一个工程… 结合下面几条注意事项,按照https://www.cnblogs.com/liusong-funtime/p/9144275.html操作即可 如果在选择Tomcat-> Local右边没有出现配置信息,问题可能是你的IDEA有汉化包,需要将汉化包去掉,汉化包文

Quilan的博客 2035
上一篇: java服务器端开发-servlet:3_3、Servlet使用jdbc访问数据库:循环查询添加员工信息
下一篇: java服务器端开发-servlet:3_5、Servlet使用jdbc访问数据库:删除个人、所有员工信息,重定向到员工列表
被开发耽误的大厨
被开发耽误的大厨 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄15年 4万+粉丝 635原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

被开发耽误的大厨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值