Java EE SSH框架之Struts2 (1)—— 认识Struts2并基于Struts2写一个HelloWorld

使用IDEA学习Struts2框架 (一)Struts2入门-HelloWorld应用 作为一个刚学习完JavaWeb必要储备知识的人,早已经急不可耐地想要学习运用MVC设计模式的Web框架了。目前Java的三大框架仍然是ssh(Struts、Spring、Hibernate),而struts2对于struts1的一些缺点进行了改进,那么本着了解MVC设计模式和基础web框架学习的目的,开始学习struts2。开发工具IDEA(没有用过Eclipse,但是已经习惯了IDEA,就不改了... 阅读详情
      Struts 2的体系与Struts 1体系的差别非常大,因为Struts 2使用了WebWork的设计核心,而不是使用Struts 1的设计核心。Struts 2大量使用拦截器来处理用户请求,从而允许用户的业务逻辑控制器与Servlet API分离。

 一、Struts2的由来(简单了解)

    Struts 1是全世界第一个发布的MVC框架,它由Craig McClanahan在2001年6月发布,该框架一经推出,就得到了世界上Java Web开发者的拥护,经过长达6年时间的锤炼,Struts 1框架更加成熟、稳定,性能也有了很好的保证。

    后来Struts 2 问世了,号称是一个全新的框架,但这仅仅是相对Struts 1而言。Struts 2与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。从某种程度上来讲,Strut2没有继承Struts 1的血统,而是继承了WebWork的血统。或者说,WebWork衍生出了Struts 2,而不是Struts 1衍生了Struts 2。因为Struts 2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证;而且吸收了Struts 1和WebWork两者的优势,因此,是一个非常值得期待的框架。

虽然这种全新的框架也慢慢在被新的框架取代,但我觉得还是有学习的必要,有些工作原理之类的未必是新的。


1.1、Struts1 中存在的问题

1)     支持的表现层技术单一:Struts 1 只支持JSP作为表现层技术,不提供与其他表现层技术(如Velocity、FreeMarker等)的整合。这一点严重制约了Struts 1框架的使用

2)     与Servlet API严重耦合,难于测试

3)     代码严重依赖于Struts 1 API,属于侵入式设计


1.2、WebWork相对于Struts 2的优点

 1) 支持更多的表现层技术,有更好的适应性:WebWork对多种表现层技术:JSP、Velocity和FreeMarker等都有很好的支持   

2)Action无需与Servlet API耦合,更容易测试

3)Action无需与WebWork耦合,代码重用率高



二、Struts 2的安装与配置

2.1、Struts 2 下载

下载地址:http://struts.apache.org/   直接点击download,进入到如下页面,单击第一个Struts...-all.zip下载


下载完后,解压到本地磁盘,该文件夹包含如下文件结构:


-》apps:该文件夹下包含了struts 2 的示例应用。

-》docs:struts2的相关文档,包含struts2的快速入门、struts2的帮助文档及API文档等内容。

-》lib:该文件夹下包含了struts2框架的核心类库,以及struts2的第三方插件类库。

-》 src:该文件下包含了struts2框架的全部源代码。



2.2、配置

2.2.1、创建Java Web项目


2.2.2、三步完成Struts2 FrameWork开发环境的搭建

☞①加入搭建Struts2 FrameWork开发环境的必需Jar包,将必需的11个Jar包复制到【lib】文件夹中到【lib】文件夹



☞②在【src】目录下创建“struts.xml”文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.devMode" value="true" />
    <package name="Struts2_StudyDemo" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

 ☞③在【web.xml】文件中配置Struts2的核心过滤器(红色部分)

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Struts2_StudyDemo</display-name>
    <welcome-file-list>
	<welcome-file>index.jsp</welcome-file>	
    </welcome-file-list>

   <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    
    <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>


 2.2.3、创建Model(模型)类MessageStore

package com.zl.struts.model;

public class MessageStore {
	private String message;

	public MessageStore(String msg) {
		this.setMessage(msg);
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
}


2.2.4、创建Action类HelloWorldAction类,充当Controller

package com.zl.struts.action;

import com.opensymphony.xwork2.ActionSupport;
import com.zl.struts.model.MessageStore;

public class HelloWorldAction extends ActionSupport{
    private MessageStore msgStore;

	@Override
	public String execute() throws Exception {
		msgStore = new MessageStore("Helloworld!");
		return SUCCESS;
	}

	public MessageStore getMsgStore() {
		return msgStore;
	}

	public void setMsgStore(MessageStore msgStore) {
		this.msgStore = msgStore;
	}  
}


2.2.5、创建View(视图)类

HelloWorld.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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>HelloWorld!</title>
</head>
<body>
    <h2><s:property value="msgStore.message" /></h2>
</body>
</html>


2.2.6、配置struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.devMode" value="true" />
    <package name="Struts2_StudyDemo" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
        <action name="hello" class="com.zl.struts.action.HelloWorldAction" method="execute">
             <result name="success">/HelloWorld.jsp</result>
         </action>
    </package>
</struts>


2.2.7、创建Action的URL链接

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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=ISO-8859-1">
<title>Basic Struts 2 Application - Welcome</title>
</head>
<body>
<h1>Welcome To Struts 2!</h1>
<p><a href="<s:url action='hello'/>">Hello World</a></p>
</body>
</html>

 “<%@ taglib prefix="s" uri="/struts-tags" %>”表示引入struts2的标签,“<s:url action>”是一个Struts2的标签,用于创建Action的URL链接,

“<s:url action='hello'/>”表示链接到一个名字为“hello”的Action,这个名字为“hello”的Action是在struts.xml配置文件配置好的,在struts.xml文件中可以找到如下的配置信息

<action name="hello" class="com.zl.struts.actionHelloWorldAction" method="execute">
    <result name="success">/HelloWorld.jsp</result>
</action>

2.2.8、部署运行

单击项目名右键,选择Run As -》Run on Server


点击超链接:




开源3D激光SLAM算法的异同点、优劣势与适配场景总结 本文对比分析了主流开源3D激光SLAM方案的核心差异与适用场景。LOAM架构简洁但精度较低;LeGO-LOAM轻量化适合地面机器人;LIO-SAM采用因子图优化支持多传感器融合;LVI-SAM通过视觉-激光-惯性三重冗余提升鲁棒性;FAST-LIO系列基于滤波架构实现超高实时性。选型需权衡传感器配置(纯激光/激光+IMU/激光+视觉)、运动状态(高速/常规)、计算资源等因素:资源受限选LeGO-LOAM或Faster-LIO,高速运动选FAST-LIO系列,退化环境选LVI-SAM,全局一致性需求选LIO- 阅读详情

相关推荐

LVDS信号调试必备:5分钟搞懂Xilinx IDELAYE3的TIME模式校准

本文深入解析了在Xilinx Ultrascale系列FPGA中调试LVDS信号时,如何正确使用IDELAYE3的TIME模式进行精密延迟校准。文章重点阐述了IDELAYCTRL、EN_VTC管脚与校准状态机的协同工作机制,揭秘了内置自校准(BISC)中Align_Delay的影响,并提供了从抽头值计算到实际眼图优化的完整实战方案,帮助工程师快速解决高速接口的时序问题。

joy55的博客 217

java struts2_java struts2框架简介

一、Struts2简介1、Struts2概述Struts2是Apache发行的MVC开源框架。注意:它只是表现层(MVC)框架。M:model-----数据封装------->javabeanV:view------视图----------->jspC:control------控制器--------> struts2( filter),struts1(servlet)2、Str...

weixin_39670545的博客 320

GAMES101学习-第8课进行shader的初步了解

详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。

qq_41835314的博客 1917

SSH框架学习之Struts2(1):Hello World

参考视频:尚学堂Action入门:由hello world介绍struts先应用,再理论 打开myEclipse 右键new – Project – MyEclipse – Java Enterprise Project – Web Project 写项目名称,选就Java EE 5.0 , finish 有几个地方要设置,这里要小心: Window – Preferences – MyEclip

ningmeng1227的博客 332

ArcGIS栅格数据像元值与坐标值提取及Excel导出全流程解析

本文详细解析了使用ArcGIS将栅格数据批量提取像元值与坐标值并导出至Excel的全流程。通过“栅格转点”、“添加XY坐标”和“表转Excel”三大核心步骤,无需编程即可自动化处理遥感、环境等领域的空间数据,有效提升数据分析效率。

zeta9的博客 365

Numpy快速入门(np)!看这一篇就够了

Numpy快速入门(np)!看这一篇就够了

weixin_74009895的博客 2679

struts2:图解action之HelloWorld示范(从action转到JSP)

http://www.cnblogs.com/nayitian/p/3429071.html 虽然Struts 2.x的Action在技术上不需要实现任何接口或继承任何类型,但是,大多情况下我们都会出于方便的原因,使Action类继承com.opensymphony.xwork2.ActionSupport类,并重载(Override)此类里的String execute()方法

KK的博客 531

QtWebApp的使用【在Qt中搭建HTTP服务器】(一)

用Qt和QtWebApp能够实现在C++中开发HTTP Web服务器应用程序。 首先,需要先安装Qt的软件开发工具包。点此下载 其次,下载最新的QtWebApp库。点此下载 下载并解压缩QtWebApp ZIP文件。你将会看到: 如何使用QtWebApp 1)将QtWebApp.zip文件解压到文件夹中,并创建一个名为“ MyFirstWebApp”的新Qt控制台项目。然后,建立如下文件结构: 2)将以下行添加到MyFirstWebApp项目的项目文件中: QT += network include(

饭的笔记本 2万+

基于Struts开发的入门级应用Helloworld

由于自己近期在学习SSH框架,因此把学习的过程记录下来。 创建Struts应用首先要下载struts源码和进行相应的配置,struts的下载和配置参照我前面的博客。 一.打开myeclipse,新建一个web project,此处命名为HelloStruts. 二.从所要使用的struts lib库中把所要的jar包拷贝到WEB-INF下的lib文件夹里,本文使用的是2.3.16

longshengguoji的专栏 2057

保姆级教程:用BMS的HVIL检测电路,手把手教你排查高压互锁故障(附PWM/直流源方案对比)

本文详细解析了BMS中的HVIL检测电路,通过对比直流源与PWM两种方案,提供了一套系统化的高压互锁故障诊断流程。从电路原理到实战技巧,帮助维修人员精准定位故障根源,提升电动汽车高压系统的安全性和可靠性。

weixin_29300241的博客 392

基于python获取网易云热门歌单及封面

先看一下图片背后的代码 非常好,里面歌单名字,id,以及封面图片都有了.在复制url的时候注意把/#删掉,要不然爬不了. import requests from lxml import etree url='https://music.163.com/discover/playlist' head={ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Ch

ziyuan12345678的博客 536

Struts2框架学习之一:Hello World程序

前言 Struts2框架Apache基金组织下的一个开源框架,基于MVC模式设计的Web应用开发框架。Struts 2是一个用于开发Java EE网络应用程序的开源Web应用框架,它利用并扩展了Java Servlet API,鼓励开发者采用MVC架构。目前struts2的最高版本是2.5(测试版)。 快速入门 1、下载和安装 ...

weixin_33920401的博客 256

基于Simulink的固态变压器(SST)多级协同控制

本文基于Simulink平台,详细介绍了固态变压器(SST)多级协同控制的建模与仿真方法。针对SST三级架构(AC-DC、DC-DC、DC-AC)存在的级间耦合问题,提出了纵向解耦与横向联动的协同控制策略。通过搭建10kV/400V级联型SST系统模型,实现了输入电压波动±20%或负载0-100%跳变时直流母线电压波动小于2%的控制目标。文章详细讲解了Simulink建模步骤、控制算法推导及工程部署建议,包括功率前馈控制、虚拟惯性算法等关键技术。仿真结果表明,该协同控制方案能有效抑制负载突变时的电压波动,为

MHD0815的博客 214

SSH(Spring+Struts+Hibernate)学习笔记(三)Struts 2 Hello World

本文以Hello World为例介绍Struts 2的简单应用 开发工具:Eclipse EE Juno 4.2 运行环境:Java 1.7+Tomcat 7+Struts 2.3.4 1. 下载Struts 2 Struts 2完整版下载地址:http://labs.mop.com/apache-mirror//struts/binaries/struts-2.3.4-all.zip

ahaqxjl的专栏 2497

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

ssh的简单例子适合初级人员学习

ssh的简单例子适合初级人员学习(本文利用struts2与HIbernate结合的方式实现一个简单的实例) 首先是Struts2的利用,及通过action点击的方式实现各个页面的点击更换, 先给读者看一个简易的桌面,随手做的勿喷 <body> <center> <table width="90%" height="95%" border="1"...

zhangzhongyanting的博客 378

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

windows java web_Windows下Java Web开发环境

概要1.SSH开发相关软件及开发包下载2.软件安装及相关设置3.最简单的Web程序1.软件下载在D盘建一个目录JavaTools,用来存放下载的软件和开发包。(本教程将使用D盘,你也可以使用C盘或E盘)。下载软件的原则,有Zip版的不下载exe版的。1)JDK:JDK 6 Update 7 Windows版下载页面:http://java.sun.com/javase/downloads/inde...

weixin_39804603的博客 194

深度学习工具包 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")

Java EE SSH框架之整合(登录功能)

SSH三大框架整合原理见下图:了解大致原理之后就是导包一、导包(最终,WEB_INF的lib下一共40个jar包)若懒得自己去找直接用我的也可以——》Baidu网盘链接:https://pan.baidu.com/s/1rVESEVjq_eAp8bUDFjrx_Q  密码:bcnlStruts2:①apps下的Struts2-blank所有包,注意,图中选中的javassist包会与hiberna...

zl_StepByStep的博客 2676

Java EE SSH框架之整合(登录+分页查询+增删改)

本篇只涉及到两个实体类 Administer 和 Book ,两者之间没什么联系,不同用户登陆之后看到的/操作的都是一样的book列表,但实际业务中,针对于不同用户登陆后所看到的和操作的都应该是不一样的。本篇作为过渡,下一篇将实现一个简单的个人博客项目,相当于“一对多”(User 和 Blog),还会涉及到拦截器,注册验证(Ajax)。

zl_StepByStep的博客 954

SSH整合之个人博客系统一对多(登录+注册(Ajax)+拦截器+分页查询+增删改)

我做的这个小网站(个人博客系统)严格按照三层架构(Web-Service-Dao),将Ajax应用到了注册功能中(在账号输入框失去焦点时,提示账号有没有被注册过),Struts2的自定义拦截器(用户只有登陆了,才能对博客进行增删改查),Spring中的DI、AOP、事务管理。所有对象都交由Spring管理,HibernateTemplate操作数据库(applicationContext.xml中可以体现)。 用户可以选择登录,可以自行注册,登陆后,可以退出登录,再登别的账号(不关闭窗口,不回退

zl_StepByStep的博客 789

Java EE SSH框架之hibernate(3)—— hibernate中的一对多和多对多

一、一对多    在一对多的表中,外键指向一的那一方的主键    看下图的两张表,客户表与联系人表的关系是一对多。客户表的id是主键,在联系人表中是cid,即外键所以联系人表的外键指向了客户表的主键。表中的表达:实体中的表达:二、多对多...

zl_StepByStep的博客 683

Java EE SSH框架之Spring(2)——Spring注入依赖的两种形式

Spring注入依赖(DI),可以在配置文件(applicationContext)中配置,也可以通过注解在类中配置。对于Spring不太了解的请看我上一篇文章!一、Spring在配置文件中的四种注入方式上一篇总结的知识点关于bean元素的,这里不再重复1、set方式注入(重点)    set方式注入值类型:(这里只是测试一下,所以没有用到主配置文件,仅仅只是在包里面)&lt;!-- set方式注...

zl_StepByStep的博客 535

Java EE SSH框架之hibernate(4)—— 查询优化

接触到的查询方法:get查询——根据id查询,语法单一

zl_StepByStep的博客 513

Java EE SSH框架之Spring(5)——Spring中的AOP事务

一、相关概念1.1、事务 1.1.1、事务特性       原子性(acid):强调事务不可分割       一致性:事务的执行前后数据的完整性保持一致       隔离性:一个事物执行的过程中,不应该受到其他事物的干扰       持久性:事务一旦结束,数据就持久到数据库   1.1.2、事务的并发问题        脏读:一个事务读到了另一个事务的未提交的数据        不可重复读:一个事...

zl_StepByStep的博客 511

Java EE SSH框架之Struts2 (2)—— Struts2访问流程、架构及配置

上篇中谈到了Struts需要以下基础jar包,这里粗略补充一下各个jar包的作用:一、Struts2的访问流程及架构1.1Struts2访问流程此图仅仅帮助理解Struts2访问流程1.2Struts2架构Struts核心——拦截器1.表面上看,拦截器帮助我们封装了很多功能。2.拦截器优秀的设计——可插拔式设计。3.aop(面向切面编程)思想。二、struts.xml配置下面是struts.xml...

zl_StepByStep的博客 511

Java EE SSH框架之Spring(1)——Spring介绍

一、Spring介绍1.1、Spring在三层架构中的位置1.2、Spring一站式框架    ★ 因为Spring框架性质是属于容器性质的;    ★ 容器中装有什么对象就有什么功能;    ★ 不仅不排斥其他框架、还能帮其他框架管理对象    ★ AOP(面向切面编程)支持;    ★ IoC(控制反转)思想;    ★ Spring JDBC;    ★ AOP事务。二、搭建开发环境Spri...

zl_StepByStep的博客 494

Java EE SSH框架之Struts2 (4)—— Struts2参数获取方式

一、Action生命周期1.每次请求Action时,都会创建新的 Action实例对象。这与Servlet不同,Servlet只会创建一个,Servlet是单例模式;2.Action是线程安全的,可以使用成员变量接收参数,而Servlet是线程不安全的。二、参数获取方式2.1、属性驱动获取参数此方式是官方推荐的,现实开发中不用此种方式。  Action准备与参数键同名属性。例:jsp中表单: ...

zl_StepByStep的博客 461
上一篇: Servlet(二)— — Servlet中操作session、application;JSP与Servlet传值
下一篇: (1)初步学习Java时一些问题的解答
zl_StepByStep
博客等级 码龄10年 154粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值