SSH框架的原理和搭建

您所在的位置:网站首页 javassh框架原理 SSH框架的原理和搭建

SSH框架的原理和搭建

2023-12-14 13:12| 来源: 网络整理| 查看: 265

三大框架:Struts+Hibernate+Spring

 Java三大框架主要用来做WEN应用。

 Struts主要负责表示层的显示

 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作)

 Hibernate主要是数据持久化到数据库

   再用jsp的servlet做网页开发的时候有个 web.xml的映射文件,里面有一个mapping的标签就是用来做文件映射的。当你在浏览器上输入URL得知的时候,文件就会根据你写的名称对应到一 个JAVA文件,根据java文件里编写的内容显示在浏览器上,就是一个网页。

         一 .Struts框架:struts是开源软件。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。

    1.流程:服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。

    2.架构:Struts对Model,View和Controller都提供了对应的组件。ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。

        Model部分:由JavaBean组 成,ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给 Action,Action根据ActionFrom里面的请求参数处理用户的请求。JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分:该部分采用JSP实现。Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。对应上图的JSP部分。

   Controller组件:Controller组件有两个部分组成——系统核心 控制器,业务逻辑控制器。   系统核心控制器,对应上图的ActionServlet。该控制器由Struts框架提供,继承HttpServlet 类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。业务逻辑控制器,负责处 理用户请求,本身不具备处理能力,而是调用Model来完成处理。对应Action部分。

 二.Spring框架

Spring是一个解决了许多在J2EE开发中常见的的问题的强大框架。 Springle提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类变成的好习惯。Spring的架构基础是基于使用JavaBean属性 的Inversion of Control 容器。然而Spring在使用IoC容器作为构建玩关注所有架构层层的完整解决方案方面是独一无二的。Spring提供了唯一的数据管理 抽象包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping 解决方案。

三.Hibernate框架

Hibernate 是一个开源代码的对象关系映射框架,对JDBC惊醒了费城轻量级的 的对象封装,使得Java程序员可以随心所欲的使用对象变成思维来操作数据库。Hebernate可以应用在任何使用JDBC的场合,既可以在java的 客户端程序使用,也可以在Servlet/JSP的Web应用中使用最具革命意义的事,Hibernate可以在应用EJB的J2EE架构中取代CMP, 完成数据持久化的重任

Hibernate的核心接口一共有5个,分别为:Session、 SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口, 不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。

1.Session接口:负责执行被持久化对象的CRUD操作(CRUD的任务是完成与 数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于 JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将 HttpSession对象称为用户session。

2.SessionFactory接口:负责初始化Hibernate。它充当数据存储 源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常 只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

3.Configuration接口:负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

4.Transaction接口:负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

5.Query和Criteria接口:负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。

SSH对应 struts spring hibernatestruts 采用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.htmlMyeclipse 汉化包及汉化教程:http://blog.csdn.net/cntanghai/article/details/6310200

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

数据库,注意安装时设置的密码千万别忘了。MySQL详细图文安装教程:http://jingyan.baidu.com/article/642c9d34aa809a644a46f717.htmlMySQL 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/JDriver name 起名叫testConnection URL 更改为jdbc:mysql://自己的IP地址:端口号/数据库名称User name 填写MySQL的用户名Password 填写MySQL的密码Driver JARs 点击Add JARs按钮,浏览到事先准备的mysql-connector-java-5.0.8-bin.jarSave 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中 的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: loginName:loginForm在下方Form Properties中添加两个属性username: JSP input type textpassword: 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中添加"登录成功!"。在loginFail.jsp页面body中添加"登录失败"。

[转载]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里多了两行代码,页面跳转添加完成。

[转载]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,代码如下:

             JSP for LoginForm form                            username :             password :                         

改成:

             用户登录                            帐号 :             密码 :                         

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

[转载]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=asdpassword=asd123nickname=中文不是乱码

[转载]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中添加一行代码:

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

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

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

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

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

Use case填写registerForm Properties填写3个属性username:textpassword:passwordnickname:text

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

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

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

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

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

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

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

汉化注册页面

             注册页                            用户名 :             密码 :             昵称 :                         

打开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中添加一行代码

重新启动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框架的搭建全部完成

你们都是有经验的开发人员


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3