当前位置: 首页 > 编程日记 > 正文

[转载]SSH框架搭建详细图文教程

什么是SSH?

SSH对应 struts spring hibernate
struts 采用MVC模式,主要是作用于用户交互
spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合
hibernate 是对象持久化框架,其实就是实体类和数据库表建立关系,操作类就会触发相应的sql语句,可以不用写任何sql语句,完成数据库编程(引自百度知道)

SSH就是Struts + Spring + Hibernate 3个Java框架的集合,现在Java开发中常用的框架组合。用来开发后台,与前台和数据库进行数据交互。最初学这个是为了写JSP。
 
SSH框架搭建步骤很多,但是不难,因为MyEclipse已经帮我们做了大部分的工作,如果纯手动添加这个框架的话,那真是够复杂的了。不过涉及的知识挺多的,适合有一定基础的人。下面详细介绍一下SSH框架的搭建步骤并且解决了几个我在搭建过程中遇到的问题。

事先准备工作:

AS3学习笔记3-Flash程序员常用开发工具1.JDK

这个是一切的前提,相信大家都有。没有的话下面的步骤也不用看了,先安装JDK,配置环境变量吧。
JDK 7.0 下载:http://www.onlinedown.net/soft/61003.htm
配置Java环境变量教程:http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html

AS3学习笔记3-Flash程序员常用开发工具2.MyEclipse

我们主要用MyEclipse来搭建SSH, 所以这个必须有,我用MyEclipse 8.5搭建过SSH,没问题。没有的话建议下载高版本的,与时俱进嘛。汉化或者不汉化看个人习惯,我觉得中文用起来比较舒服。
Myeclipse 10 下载:http://www.pc6.com/softview/SoftView_57131.html
Myeclipse 汉化包及汉化教程:http://blog.csdn.net/cntanghai/article/details/6310200

AS3学习笔记3-Flash程序员常用开发工具3.MySQL

数据库,注意安装时设置的密码千万别忘了。
MySQL详细图文安装教程:http://jingyan.baidu.com/article/642c9d34aa809a644a46f717.html
MySQL 5.5.28 下载:http://down.chinaz.com/soft/29015.htm

AS3学习笔记3-Flash程序员常用开发工具4.Navicat for MySQL

MySQL视图化管理及开发工具,主要用他来操作MySQL。推荐安装,非必须。
Navicat for MySQL v10.1.7简体中文特别版下载:http://www.xiazaiba.com/html/2122.html

5.mysql-connector-java-5.0.8-bin.jar

Java连接MySQL数据库时需要用到的jar包。
jar下载:http://pan.baidu.com/share/link?shareid=444190&uk=4262258889

6.在MySQL中新建一个表,用来测试数据

我在这里准备做一个注册登录功能,所以在test里建了一个user表,表里的字段有id、username、password、nickname四个字段。nickname用来测试中文是否乱码。
SQL语句:

CREATE TABLE `user` (
  `id` bigint(20) unsigned NOT NULL auto_increment COMMENT 'ID',
  `username` varchar(40) character set utf8 NOT NULL COMMENT '用户名',
  `password` varchar(40) collate utf8_unicode_ci NOT NULL COMMENT '密码',
  `nickname` varchar(40) character set utf8 NOT NULL COMMENT '昵称',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='用户信息表';




SSH框架搭建步骤:

1.新建一个项目。打开MyEclipse,新建一个Web项目,起名就叫SSH吧,点击完成,若弹出提示点Yes即可。
[转载]SSH框架搭建详细图文教程
[转载]SSH框架搭建详细图文教程 

2.添加Struts框架。右键这个项目,选择MyEclipse->Add Struts Capabilities。 在弹出的菜单中把包的路径改一下, Base package for new classes选项中的路径com.yourcompany.struts改成com.ssh.struts, 点击完成。

[转载]SSH框架搭建详细图文教程

展开WebRoot中的WEB-INF文件夹,看到目录结构如下图,证明Struts框架添加完成。
[转载]SSH框架搭建详细图文教程

3.添加Spring框架。右键这个项目,选择MyEclipse->Add Spring Capabilities。
[转载]SSH框架搭建详细图文教程

在菜单中选择如下6个库,点击下一步。
[转载]SSH框架搭建详细图文教程

更改Folder路径,选择SSH项目WebRoot文件夹下的WEB-INF,完成。

[转载]SSH框架搭建详细图文教程

现在项目的目录结构如下,Spring框架添加完成。

[转载]SSH框架搭建详细图文教程

4.连接数据库。点击右上角的图标"打开透视图",选择MyEclipse Database Explorer。在窗口中右键->New 新建一个数据库连接。

[转载]SSH框架搭建详细图文教程

Driver template 选择 MySQL Connector/J
Driver name 起名叫test
Connection URL 更改为jdbc:mysql://自己的IP地址:端口号/数据库名称
User name 填写MySQL的用户名
Password 填写MySQL的密码
Driver JARs 点击Add JARs按钮,浏览到事先准备的mysql-connector-java-5.0.8-bin.jar
Save password 选上

[转载]SSH框架搭建详细图文教程

点击Test Driver,测试结果:数据库配置正确,点击完成。

[转载]SSH框架搭建详细图文教程

双击添加的test连接,展开目录,可以发现我们事先创建的user表。

[转载]SSH框架搭建详细图文教程



5.添加Hibernate框架。右键SSH项目,选择MyEclipse->Add Spring Capabilities。

[转载]SSH框架搭建详细图文教程 

点击下一步。
[转载]SSH框架搭建详细图文教程

配置中选择第二项"Spring configuration file"。把Spring与Hibernate整合到一起,点击下一步。

[转载]SSH框架搭建详细图文教程

在菜单中选第二项"Existing Spring configuration file",点击下一步。

[转载]SSH框架搭建详细图文教程

DB Driver选择在添加Spring框架时配置的test,点击下一步。

[转载]SSH框架搭建详细图文教程

取消Create SessionFactory class?这个选项,点击完成。

[转载]SSH框架搭建详细图文教程 

现在的目录结构如下,SSH框架大体搭建完成。
[转载]SSH框架搭建详细图文教程

6.测试功能。

先部署一下项目,访问首页看看效果。选择窗口上方图标"Deploy MyEclipse J2EE Project to Server"->点击add添加SSH项目->Server选择MyEclipse Tomcat。

[转载]SSH框架搭建详细图文教程

项目部署成功。

[转载]SSH框架搭建详细图文教程

点击窗口上方图标"Run MyEclipse Servers"启动Tomcat。

[转载]SSH框架搭建详细图文教程

在浏览器中访问SSH项目地址,别忘了加上Tomcat的默认端口,8080端口。
输入地址:http://localhost:8080/SSH,Tomcat会访问SSH项目WebRoot下的index.jsp。

[转载]SSH框架搭建详细图文教程

现在修改一下index.jsp中给的内容,在Body中添加"这是我的首页"。Ctrl+S保存。

[转载]SSH框架搭建详细图文教程

这里出现了一个问题,页面默认的编码为ISO-8859-1,不支持中文字符,无法保存。我们先把这个提示关掉。

选择窗口->首选项->MyEclipse->JSP->Files and Editors->JSP,把编码改为ISO 10646/Unicode(UTF-8)->应用->确定。

[转载]SSH框架搭建详细图文教程

编码问题是一个很常见的问题,为避免出现这类我提我们尽量将工作空间的所有编码格式统一,无论前台后台还是数据库,否则会引发许多问题,例如中文乱码。

选择窗口->首选项->常规->工作空间->文本文件编码选择其他->其他选项里选择UTF-8->应用->确定。

[转载]SSH框架搭建详细图文教程

这样设置后,我们的工作空间编码就比较统一了,再生成的JSP页面就是UTF-8编码格式了,能够很好的支持中文字符,不过之前生成的JSP页面编码格式要我们手动更改。
把index.jsp中<%@ page language="java" import="java.util.*" pageEncoding="XXX"%> 的pageEncoding改为UTF-8,再保存页面。这时再访问http://localhost:8080/SSH , 正确显示中文,这回没问题了。

[转载]SSH框架搭建详细图文教程

现在写个注册登录的功能来测试一下框架整合的结果。

切换到MyEclipse DataBase Explorer视图,通过Spring框架的逆向工程功能把user表逆向成Java实体类。右键user表选择"Hibernate Reverse Engineering"。
[转载]SSH框架搭建详细图文教程

Java src folder 选择SSH项目下的src文件夹。
Java package 填写com.ssh.user

勾选前三个选项:Create POJO、Java Data Obect和Java Data Access Object。POJO类是数据库表格所对应的Java类,JDO类是MyEclipse自动生成的对数据库的一些操作,这里会封装一些常用的操作,基本上可以满足我们的各种需要了,选择下一步。

[转载]SSH框架搭建详细图文教程

Id Generator 选择 native,点击完成。

[转载]SSH框架搭建详细图文教程


此时的目录结构如下,我们可以看到系统生成了3个类,一个配置文件。
User 继承自AbstractUser,是User表的实体类。
UserDAO 封装了一些对数据库的常用操作。
User.hbm.xml 是hibernate-mapping映射配置文件,配置了哪个实体类映射哪个表,配置了实体类的哪个属性映射表里的哪列。
如果这些东西不用hibernate生成,那么我们就要自己写,要浪费很多时间,hibernate的作用就体现出来了。

[转载]SSH框架搭建详细图文教程

现在来写测试页。打开WEB-INF文件夹下的struts-config.xml文件,切换到设计视图(design)。右键->New->Form Action and JSP。

[转载]SSH框架搭建详细图文教程

填写Form表单属性:
Use case: login
Name:loginForm
在下方Form Properties中添加两个属性
username: JSP input type text
password: JSP input type password

[转载]SSH框架搭建详细图文教程

切换到JSP选项,填写JSP属性:
勾选Create JSP form
路径修改为/jsp/login.jsp
点击完成。

[转载]SSH框架搭建详细图文教程

此时的目录结构如下,可以看到在WebRoot/jsp/下 生成了一个login.jsp页。

[转载]SSH框架搭建详细图文教程

我们查看一下现在的目录结构,并把struts-config.xml切换到Source视图,看看struts框架帮我们干了什么。

可以看到目录里多了3个文件:LoginFrom.java、LoginAction.java、login.jsp。这正是我们在设计视图里选择Form,Action and JSP所配置的文件。而struts-config.xml里也相应的添加了这3个文件的映射配置信息。如果这些不用struts生成的话,就需要我们自己写,会浪费很多时间,struts的作用体现出来了。

这里说一下页面请求的执行顺序:
1、login.jsp用户填写了登录信息并点击了登录按钮,发送了一个请求(loginFrom.do)。
2、struts会通过struts-config.xml找到相应的映射配置(Action name==loginFrom)。
3、把登录表单的属性映射到loginForm.java里(bean)。
4、把loginForm和mapping、request、response一起交给LoginAction处理。
5、LoginAction执行完后的通过mapping找到跳转页面forward(这个下面会提到)。
[转载]SSH框架搭建详细图文教程


现在添加两个页面:登录成功页和登录失败页,实现登录后的跳转。
在WebRoot/jsp/下新建两个JSP页。起名为loginSuccess.jsp和loginFail.jsp。

[转载]SSH框架搭建详细图文教程

向导信息如下:

[转载]SSH框架搭建详细图文教程

在loginSuccess.jsp页面body中添加"登录成功!<br>"。
在loginFail.jsp页面body中添加"登录失败<br>"。

[转载]SSH框架搭建详细图文教程

把登录页、登录成功页、登录失败页3个页面相关联。
切换到struts-config.xml的设计视图。右键login.jsp->New->Forward。

[转载]SSH框架搭建详细图文教程

loginSuccess:
选择Local Action Forward
浏览Action Path:/login
填写name:loginSuccess
浏览Path:/jsp/loginSuccess.jsp
完成
loginFail:
选择Local Action Forward
浏览Action Path:/login
填写name:loginFail
浏览Path:/jsp/loginFail.jsp
完成
[转载]SSH框架搭建详细图文教程

切换到Source视图,可以看到代码如下图:
Action里多了
<forward name="loginSuccess" path="/jsp/loginSuccess.jsp" />
<forward name="loginFail" path="/jsp/loginFail.jsp" />
两行代码,页面跳转添加完成。

[转载]SSH框架搭建详细图文教程 

现在来写具体的执行代码。打开LoginAction.java。可以看到自动生成的代码如下图:

[转载]SSH框架搭建详细图文教程

我们先不连数据库,先写一个测试的登录代码。

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
        //获取帐号密码
        String username = loginForm.getUsername();
        String password = loginForm.getPassword();
        //帐号密码匹配,跳转到登录成功页
        if("asd".equals(username) && "asd123".equals(password)){
            return mapping.findForward("loginSuccess");
        }
        //不匹配,跳转到登录失败页
        return mapping.findForward("loginFail");
    }

准备就绪,启动Tomcat,在浏览器中访问登录页:
http://localhost:8080/SSH/jsp/login.jsp

[转载]SSH框架搭建详细图文教程

看到这个界面,都是英文,很不爽,不仅仅因为丑。把它改成中文的,打开login.jsp,代码如下:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
 
<html>
    <head>
        <title>JSP for LoginForm form</title>
    </head>
    <body>
        <html:form action="/login">
            username : <html:text property="username"/><html:errors property="username"/><br/>
            password : <html:password property="password"/><html:errors property="password"/><br/>
            <html:submit/><html:cancel/>
        </html:form>
    </body>
</html>

改成:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
 
<html>
    <head>
        <title>用户登录</title>
    </head>
    <body>
        <html:form action="/login">
            帐号 : <html:text property="username"/><html:errors property="username"/><br/>
            密码 : <html:password property="password"/><html:errors property="password"/><br/>
            <html:submit value="登录"/><html:cancel value="取消"/>
        </html:form>
    </body>
</html>

刷新一下登录页面,看看效果:

[转载]SSH框架搭建详细图文教程

登录界面汉化成功!看起来舒服多了。点击登录。
这时候因为我们什么都没填,应该跳转到登录失败页面。

[转载]SSH框架搭建详细图文教程

后退,回到登录界面,填写
帐号:asd
密码:asd123
点击登录,帐号密码和后台设置的匹配,这时候应该跳转到登录成功界面。

[转载]SSH框架搭建详细图文教程

测试完成,下面我们连接一下数据库,从数据库里取出user数据进行匹配。
想操作数据库我们要先获取DAO(data access object),我们的UserDAO是hibernate生成的,关于UserDAO的配置信息写在了applicationContext.xml里。所以在用UserDAO之前要先获取applicationContext.xml。

百度上查找了一下相关代码,找到了一个获取applicationContext.xml的方法。Spring框架里的
ClassPathXmlApplicationContext 通过这个类可以获取到我们需要的DAO。名字和applicationContext非常像,看起来就是这个类了。

测试一下这个类是否好用:
把LoginAction打开,把代码改为:

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
        //获取帐号密码
        String username = loginForm.getUsername();
        String password = loginForm.getPassword();
       
        //获取用户信息
        ClassPathXmlApplicationContext beans = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println(beans);
       
        //帐号密码匹配,跳转到登录成功页
        if("asd".equals(username) && "asd123".equals(password)){
            return mapping.findForward("loginSuccess");
        }
        //不匹配,跳转到登录失败页
        return mapping.findForward("loginFail");
    }

重新启动Tomcat服务器,访问登录页http://localhost:8080/SSH/jsp/login.jsp,点击登录:

javax.servlet.ServletException: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist

出现了一个错误,意思为找不到applicationContext.xml。看来我们填写的路径有问题,这个配置文件应该是从我们项目classes的根目录开始查找的,先看一下我们的项目发布后classes的路径,右键SSH项目->属性->Java构建路径->源代码。

[转载]SSH框架搭建详细图文教程

可以看到我们项目发布后classes的根目录是SSH/WebRoot/WEB-INF/classes。 applicationContext.xml是这个位置的上一级,那么相对于这个路径的位置就是"../applicationContext.xml"。现在把LoginAction里的路径修改一下:

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
        //获取帐号密码
        String username = loginForm.getUsername();
        String password = loginForm.getPassword();
       
        //获取用户信息
        ClassPathXmlApplicationContext beans = new ClassPathXmlApplicationContext("../applicationContext.xml");
        System.out.println(beans);
       
        //帐号密码匹配,跳转到登录成功页
        if("asd".equals(username) && "asd123".equals(password)){
            return mapping.findForward("loginSuccess");
        }
        //不匹配,跳转到登录失败页
        return mapping.findForward("loginFail");
    }

重新启动Tomcat服务器,访问登录页http://localhost:8080/SSH/jsp/login.jsp,点击登录:
页面不再报错,正常跳转,控制台也输出了:
org.springframework.context.support.ClassPathXmlApplicationContext@14bb075: startup date [Mon Apr 22 14:26:58 CST 2013]; root of context hierarchy]

路径的问题解决了,正确的获取到了配置信息,这个配置信息我们以后要经常用,并且没必要每次用的时候都把它创建出来,浪费时间,写一个全局变量保存它吧。在src下新建一个包com.ssh.common,在包里新建一个类Global.java。输入代码如下:

package com.ssh.common;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Global {
   
    public static ClassPathXmlApplicationContext beans = new ClassPathXmlApplicationContext("../applicationContext.xml");
   
   
    public static Object getDAO(String daoName){
        return beans.getBean(daoName);
    }
}

现在来获取数据库里的数据,在user表里新增一个用户信息
username=asd
password=asd123
nickname=中文不是乱码

[转载]SSH框架搭建详细图文教程 

把LoginAction里的代码改为:

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
        //获取帐号密码
        String username = loginForm.getUsername();
        String password = loginForm.getPassword();
       
        //检查该用户是否存在
        User instance = new User();
        instance.setUsername(username);
        instance.setPassword(password);
        UserDAO userDAO = (UserDAO)Global.getDAO("UserDAO");
        List<?> list = userDAO.findByExample(instance);
       
        //如果用户存在,则登录成功。
        if(list.size() > 0){
            User user = (User)list.get(0);
            String nickname = user.getNickname();
            //写入提示信息
            request.setAttribute("message", "您的昵称为:" + nickname);
            return mapping.findForward("loginSuccess");
        }
       
        //不匹配,跳转到登录失败页
        return mapping.findForward("loginFail");
    }

在loginSuccess.jsp的Body中添加一行代码:
<%=request.getAttribute("message")%><br>

重新启动Tomcat服务器,访问登录页http://localhost:8080/SSH/jsp/login.jsp
填写帐号:asd 密码:asd123 点击登录:

[转载]SSH框架搭建详细图文教程

登录功能完成,这是个SSH框架的搭建教程,这些测试功能就尽量简单了,大家别介意,下面来做注册功能。

切换到struts-config.xml的设计视图,右键New->Form,Action and JSP

[转载]SSH框架搭建详细图文教程

Use case填写register
Form Properties填写3个属性
username:text
password:password
nickname:text

[转载]SSH框架搭建详细图文教程

点选JSP选项,勾选Create JSP form, 路径更改为/jsp/register.jsp

[转载]SSH框架搭建详细图文教程 

现在把register.jsp与login.jsp关联,做注册成功和注册失败的跳转。
右键struts-config.xml设计视图中的regiser.jsp->New->Forward。
选择Local Action Forward
Action Path:/register
Name:registerSuccess
Path:/jsp/login.jsp
完成

[转载]SSH框架搭建详细图文教程

右键struts-config.xml设计视图中的regiser.jsp->New->Forward。
选择Local Action Forward
Action Path:/register
Name:registerFail
Path:/jsp/register.jsp
完成
struts-config.xml代码如下

[转载]SSH框架搭建详细图文教程

汉化注册页面

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
 
<html>
    <head>
        <title>注册页</title>
    </head>
    <body>
        <html:form action="/register">
            用户名 : <html:text property="username"/><html:errors property="username"/><br/>
            密码 : <html:password property="password"/><html:errors property="password"/><br/>
            昵称 : <html:text property="nickname"/><html:errors property="nickname"/><br/>
            <html:submit value="确定"/><html:cancel value="取消"/>
        </html:form>
    </body>
</html>

打开RegisterAction.java文件,实现数据的插入,修改代码如下:

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
       
        //填写的注册信息
        RegisterForm registerForm = (RegisterForm) form;
        String username = registerForm.getUsername();
        String password = registerForm.getPassword();
        String nickname = registerForm.getNickname();
       
        //检查用户名是否已被注册
        UserDAO userDAO = (UserDAO)Global.getDAO("UserDAO");
        List<?> list = userDAO.findByUsername(username);
       
        //用户名已被注册,返回注册页面
        if(list.size() > 0){
            request.setAttribute("message", "该用户名已被注册");
            return mapping.findForward("registerFail");
        }
       
        //插入新用户
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setNickname(nickname);
        userDAO.save(user);
        request.setAttribute("message", "注册成功,请登录:" + nickname);
        return mapping.findForward("registerSuccess");
    }

打开login.jsp在body中添加一行代码<%=request.getAttribute("message")%><br>

重新启动Tomcat服务器,访问注册页http://localhost:8080/SSH/jsp/register.jsp
输入帐号:asd2
输入密码:asd123
输入昵称:中文不应该是乱码
点击确认
[转载]SSH框架搭建详细图文教程

页面提示:注册成功,请登录:中文ä¸åº”该是乱ç
我们期望的是"中文不应该是乱码",但它变成乱码了,很常见的一种问题。百度查了一下相关问题,原因是使用Tomcat服务器时,struts的Form提交不支持中文,于是我们需要添加一个过滤器。

在com.ssh.common包下新建一个TomcatFormFilter类,代码如下:

package com.ssh.common;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class TomcatFormFilter implements Filter{
    //接收字符编码
    protected String encoding;
   
    public TomcatFormFilter(){}
   
    public void init(FilterConfig filterConfig) throws ServletException {
        //从web.xml中读取encoding值
        encoding = filterConfig.getInitParameter("encoding");
    }
   
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        if(request.getCharacterEncoding() == null && encoding != null){
            //设置字符集
            request.setCharacterEncoding(encoding);
        }
        //继续执行
        chain.doFilter(request, response);
    }
   
    public void destroy() {}

}

拷贝这个类中注释代码部分的xml,粘贴到web.xml中

[转载]SSH框架搭建详细图文教程

重新启动Tomcat服务器,访问注册页http://localhost:8080/SSH/jsp/register.jsp

输入帐号:asd3
输入密码:asd123
输入昵称:这回中文不应该是乱码了
点击确定

[转载]SSH框架搭建详细图文教程

至此SSH框架的搭建全部完成

转载于:https://www.cnblogs.com/hoobey/p/5512924.html

相关文章:

iOS 开发之 pdf 文档的加载与浏览的 4 种方式

原文链接&#xff1a;http://www.jianshu.com/p/1d4305a02ea5在我们的开发中&#xff0c;有些像电子书类型的 app 的开发会涉及到 pdf 文档的加载与展示。由于笔者项目中正好涉及到这块&#xff0c;于是将 pdf 常用的几种加载方式做个总结。以供后面可能用到的同学做个参考。 —…

利用三个点(trsf)来实现各种规则图形的实现

在Val3,是使用trsf(x,y,z,rx,ry,rz)来实现三维空间点的位置与方向。其中第一点和第二点位置很重要&#xff0c;第三点是用来确定方向。根据这三个点先确定一个用户坐标系。在这个坐标系中&#xff0c;实现圆&#xff0c;三角形&#xff0c;矩形&#xff0c;腰圆&#xff0c;正五…

OpenStack环境搭建(二:Fuel Master的安装及配置)

实验要求&#xff1a; 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署Fuel Master节点&#xff1b;在virtual box虚拟平台上部署计算节点Computer&#xff1b;在virtual box虚拟平台上部署控制节点Controller&#xff1b;在web控…

ScratchCardView:刮刮卡视图组件

原文链接&#xff1a;https://github.com/pgorzelany/ScratchCardViewScratchCardView&#xff1a;刮刮卡视图组件。# 为开源点赞# —— 由SwiftLanguage分享Example To run the example project, clone the repo, and run pod install from the Example directory first. Inst…

getaddrinfo()函数详解

1. 概述IPv4中使用gethostbyname()函数完成主机名到地址解析&#xff0c;这个函数仅仅支持IPv4&#xff0c;且不允许调用者指定所需地址类型的任何信息&#xff0c;返回的结构只包含了用于存储IPv4地址的空间。IPv6中引入了getaddrinfo()的新API&#xff0c;它是协议无关的&…

OpenStack环境搭建(三:Computer与Controller节点的安装及配置)

实验要求&#xff1a; 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署Fuel Master节点&#xff1b;在virtual box虚拟平台上部署计算节点Computer&#xff1b;在virtual box虚拟平台上部署控制节点Controller&#xff1b;在web控…

iOS - 支持水平 / 垂直显示自动滚动的跑马灯控件 --- SKAutoScrollLabel 的使用和实现

原文链接&#xff1a;http://www.jianshu.com/p/7221bc08f26aSKAutoScrollLabel 是一个同时支持水平 / 垂直两种类型的 “跑马灯” 效果的自动滚动 UILabel。在滚动的边缘使用了梯度褪色来解决滚动边缘生硬的效果问题&#xff0c;总体效果呈现出混然天成的感觉&#xff0c;并且…

Git简明手册

文&#xff0f;AbnerKang&#xff08;简书作者&#xff09;原 文链接&#xff1a;http://www.jianshu.com/p/d7a7ba4f2341?utm_campaignmaleskine& utm_contentnote&utm_mediumreader_share&utm_sourceweixin&fromtimeline&isappinstalled0著作权归作者所…

今天是2013年06月21日,博客之路开始了!

RT&#xff0c;从今天开始&#xff0c;准备养成写博客的习惯。 一是对学习的成果进行总结  二是检验自己是否真的弄懂某一个问题  三是分享出来与大家共勉。从此开启我的程序人生之路吧&#xff01;转载于:https://www.cnblogs.com/penghongwei/p/3147999.html

OpenStack环境搭建(四:web控制端各节点的部署及配置)

实验要求&#xff1a; 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署Fuel Master节点&#xff1b;在virtual box虚拟平台上部署计算节点Computer&#xff1b;在virtual box虚拟平台上部署控制节点Controller&#xff1b;在web控…

Spring+SpringMVC+shiro+mysql(一)

SpringSpringMVCshiromysql&#xff08;一&#xff09; 最近要做个后台管理系统&#xff0c;就会设计到权限的管理控制&#xff0c;于是就想到 shiro &#xff0c;下面是自己对Springshiro的一点点理解&#xff0c;记录下来&#xff0c;一起多探讨&#xff1a; 项目结构 1. pom…

【iOS】Socket/TCP 通信 发送 NSString 字符串格式数据

Socket/TCP 原理这里就不阐述了&#xff0c;网上一搜一大堆&#xff0c;直接上关键代码。 【注】iOS 目前有非常著名的第三方库 CocoaAsyncSocket 可以使用&#xff0c;但是我们项目当时做大数据上报要求直接发送 NSString 格式数据&#xff0c;所以自己写了一个简易版 TCP 连接…

[Win]进程间通信——邮槽Mailslot

进程间通信 进程的地址空间是私有的。出于安全性的目的&#xff0c;如果一个进程不具有特殊的权限&#xff0c;是无法访问另外一个进程的内存空间的&#xff0c;也无法知道内存中保存的数据的意义。但是在一些具体的应用情况下需要多个进行相互配合&#xff0c;有时计算机用户也…

OpenStack环境搭建(五:附加项虚拟机文件备份使用)

实验要求&#xff1a; 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署Fuel Master节点&#xff1b;在virtual box虚拟平台上部署计算节点Computer&#xff1b;在virtual box虚拟平台上部署控制节点Controller&#xff1b;在web控…

IOS入门-TargetAction

创建一个UIButton 并用Target - Action来监听它的点击事件 Target -- self控制器 Action -- 具体动作&#xff0c;self控制器中的某个方法 forControlEvents:UIControlEventTouchUpInside -- 表示监听的事件 1 - (void)btnclick:(id)sender2 {3 NSLog("点击%" ,…

【iOS_Development】文件操作

原文链接&#xff1a;http://www.jianshu.com/p/c5820ab6836biOS 文件操作 —— 由anticipate_91分享NSFileManager&#xff1a;是用来管理文件系统的&#xff0c;它可以用来进行常见的文件\文件夹操作获取NSFileManager示例[NSFileManager defaultManager] 增删改查 1. 创建文…

仿人智能控制器的参数简化(已发表于《计算机测量与控制》2013年第4期)

转载于:https://www.cnblogs.com/snake-hand/p/3153313.html

OpenStack环境搭建(六:常见问题及解决方案总结)

实验要求&#xff1a; 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署Fuel Master节点&#xff1b;在virtual box虚拟平台上部署计算节点Computer&#xff1b;在virtual box虚拟平台上部署控制节点Controller&#xff1b;在web控…

工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。 先来看名词解释。 工作区&#xff08;Working Directory&#xff09; 就是你在电脑里能看到的目录&#xff0c;比如我的learngit文件夹就是一个工作区&#xff1a; 版本库&#xff08;Repository&#xff09; 工…

Lucene类介绍

IndexWriter:lucene中最重要的的类之一&#xff0c;它主要是用来将文档加入索引&#xff0c;同时控制索引过程中的一些参数使用。 Analyzer luceneAnalyzer new StandardAnalyzer(); IndexWriter indexWriter new IndexWriter(indexDir, luceneAnalyzer, true );…

iOS 开发之沙盒机制 文件操作 (NSFielManager)

原文链接&#xff1a;http://www.jianshu.com/p/349855b5a8aeiOS APP 可以在自己的沙盒里读写文件&#xff0c;但是&#xff0c;不可以访问其他 APP 的沙盒。每一个 APP 都是一个信息孤岛&#xff0c;相互是不可以进行通信的&#xff0c;唯独可以通过 URL Scheme。沙盒里面的文…

手动部署OpenStack环境(一:Virtual Box 5.1 环境的安装及配置)

任务一、Virtual Box 5.1 环境的安装及配置 1.1、安装环境检查 1.2、创建安装目录 1.3、安装及配置 实验目的及要求 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署网络节点Network&#xff1b;在virtual box虚拟平台上部署计算…

iOS动画系列之九:实现点赞的动画及播放起伏指示器

iOS动画系列&#xff0c;共十篇。现在写到第九篇啦。感兴趣的可以通过下面的传输门进到其他几篇文章里面。 第一篇&#xff1a;iOS动画系列之一&#xff1a;通过实战学习CALayer和透视的原理。做一个带时分秒指针的时钟动画(上) 第二篇&#xff1a;iOS动画系列之二&#xff1a;…

MySql5.7环境搭建

1. 安装mysql的linux系统 [rootgrewan ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [rootgrewan ~]# uname -a Linux grewan 2.6.32-573.26.1.el6.x86_64 #1 SMP Wed May 4 00:57:44 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux [rootgrewan ~]# 注意&#xff1a;l…

Toad 修改起始窗口

Toad默认窗口时Editor&#xff0c; 如果想要修改为Schema Browser可以通过以下步骤进行修改&#xff08;以Toad9.6为例&#xff09;&#xff1a; 1&#xff0c;点击菜单栏上的View下拉菜单 2&#xff0c;选择Toad Options...菜单 3&#xff0c;在打开窗口的左边功能列表中找到并…

手动部署OpenStack环境(二:CentOS6.6虚拟机的安装及配置)

任务二、CentOS 6.6虚拟机的安装及配置 2.1、安装环境检查 2.2、安装及配置controller0节点 2.3、安装及配置computer0节点 2.4、安装及配置network0节点 2.5、对各节点进行基础配置及服务安装 任务二&#xff1a;CentOS6.6虚拟机的安装及配置 2.1、安装环境检查 2.1.1在…

练习-----查询

第一步&#xff1a;建表 1 create table student #学生表2 (3 Sno varchar(20) primary key, #学号&#xff0c;主键4 Sname varchar(20) not null, #学生姓名5 Ssex varchar(20) not null, #学生性别6 Sbirthday datetime, #学生出生日期7 Class …

UIActivityViewController使用

苹果从iOS6开始&#xff0c;提供了一个活动列表视图&#xff0c;为分享和操作数据提供了一个统一的服务接口&#xff0c;通过UIActivityViewController来控制它的呈现和关闭&#xff0c;凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。如下图所示&#xff1a; 活…

SQL Server系统表sysobjects介绍与使用

关于SQL Server数据库的一切信息都保存在它的系统表格里。我怀疑你是否花过比较多的时间来检查系统表格&#xff0c;因为你总是忙于用户表格。但是&#xff0c;你可能需要偶尔做一点不同寻常的事&#xff0c;例如数据库所有的触发器。你可以一个一个地检查表格&#xff0c;但是…

手动部署OpenStack环境(三:OpenStack环境预配置)

任务三、OpenStack环境预配置 3.1、本地OpenStack yum源制作 任务三&#xff1a;OpenStack环境预配置 3.1、本地OpenStack yum 源制作 3.1.1、拷贝镜像文件源到本地 3.1.2、查看createrepo是否安装&#xff0c;并使用yum方法安装。 &#xff08;此操作只在controller0主机进…