ssh到数据库表.docx
《ssh到数据库表.docx》由会员分享,可在线阅读,更多相关《ssh到数据库表.docx(33页珍藏版)》请在冰豆网上搜索。
ssh到数据库表
MVC是三个单词的缩写,分别为:
模型(Model),视图(View)和控制Controller)。
MVC模式的目的就是实现Web系统的职能分工。
Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。
View层用于与用户的交互,通常用JSP来实现。
Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
MVC工作机制如图:
Struts在SSH框架中起控制的作用,其核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml.主要控制逻辑关系的处理。
hibernate是数据持久化层,是一种新的对象、关系的映射工具,提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制,大大减少数据访问的复杂度。
把对数据库的直接操作,转换为对持久对象的操作。
SPRING是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,面向接口的编程,由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。
这也就是所谓“控制反转”的概念所在:
(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中,起到的主要作用是解耦。
Struts、spring、Hibernate在各层的作用:
1、struts负责web层
ActionFormBean接收网页中表单提交的数据,然后通过Action进行处理,再Forward到对应的网页。
在struts-config.xml中定义,ActionServlet会加载。
2)spring负责业务层管理,即Service(或Manager).。
1、service为action提供统一的调用接口,封装持久层的DAO.
2、可以写一些自己的业务方法。
3、统一的javabean管理方法
4、声明式事务管理
5、集成Hiberante
3)Hiberante负责持久化层,完成数据库的crud操作
hibernate为持久层提供OR/Mapping。
它有一组.hbm.xml文件和POJO,是跟数据库中的表相对应的。
然后定义DAO,这些是跟数据库打交道的类,它们会使用PO。
MVC模式工作原理:
在struts+spring+hibernate的系统中,对象的调用流程是:
JspActionServiceDAOHibernate
数据的流向是ActionFormBean接受用户的数据,Action将数据从ActionFromBean中取出,封装成VO或PO,再调用业务层的Bean类,完成各种业务处理后再forward。
而业务层Bean收到这个PO对象之后,会调用DAO接口方法,进行持久化操作。
配置文件的加载顺序是:
首先是web.xml,然后找到对应的applicationContext.xml,spring管理struts2和hibernate,然后找的是struts-config,最后找的是hibernate.cfg.xml。
下面用一个注册登录的例子来说明ssh与mvc的结合。
先大致浏览一下本案例的截图:
先看一下类图:
在看一下配置文件图:
最后看一下基本页面:
我们先从Jsp页面开始。
1>我们要开发注册、登录两个页面,这属于View层。
注册页面主要代码如下:
登录页面主要代码如下:
2>从上面我们可以看到,页面代码要通过struts.xml(struts2框架)配置文件查找相应的转发页面。
Struts.xml文件代码如下:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""http:
//struts.apache.org/dtds/struts-2.0.dtd">
--下面定义的结果对所有的Action都有效-->
/error.jsp
--指Action抛出Exception异常时,转入名为exception的结果。
-->
/success.jsp
/login.jsp
/success.jsp
/regist.jsp
Struts.xml通过web.xml文件查找到action-servlet.xml.
Web.xml文件代码如下:
xmlversion="1.0"encoding="UTF-8"?
>
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
version="2.4">
firstssh
thisisasimpleexample
webAppRootKey
firstssh.root
contextConfigLocation
/WEB-INF/applicationContext-*.xml,/WEB-INF/action-servlet.xml
log4jConfigLocation
/WEB-INF/log4j.properties
org.springframework.web.util.Log4jConfigListener
--用于初始化Spring容器的Listener-->
org.springframework.web.context.ContextLoaderListener
--定义整合SiteMesh必须的ActionContextCleanUpFilter
struts-cleanup
org.apache.struts2.dispatcher.ActionContextCleanUp
-->
--定义Struts2的FilterDispathcer的Filter-->
struts2
org.apache.struts2.dispatcher.FilterDispatcher
--
struts-cleanup
/*
-->
--FilterDispatcher用来初始化struts2并且处理所有的WEB请求。
-->
struts2
/*
--这是一个产生验证码的servlet-->
img
com.firstssh.servlet.AuthImg
img
/authImg
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encodingFilter
*.action
encodingFilter
*.jsp
hibernateFilter
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
hibernateFilter
*.action
--DWRServlet-->
dwr-invoker
org.directwebremoting.servlet.DwrServlet
debug
true
dwr-invoker
/dwr/*
10
login.jsp
401
/401.htm
403
/403.htm
404
/404.htm
500
/500.htm
Struts.xml在通过Action-servlet.xml查找到RegistAction.java和RegistAction.java。
Action-servlet.xml文件代码如下:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN2.0//EN""http:
//www.springframework.org/dtd/spring-beans-2.0.dtd">
scope="prototype">
scope="prototype">
RegistAction.java代码如下:
packagecom.firstssh.action;
importjava.util.Map;
importcom.firstssh.service.IUserService;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;
publicclassRegistActionextendsActionSupport
{
privateStringusername;
privateStringpassword;
privateStringemail;
privateStringvercode;
privateIUserServiceuserService;
publicvoidsetUserService(IUserServiceuserService){
this.userService=userService;
}
@Override
publicStringexecute()throwsException
{
Mapsession=ActionContext.getContext().getSession();
Stringver2=(String)session.get("rand");
session.put("rand",null);
if(vercode.equals(ver2))
{if(userService.validateName(username)!
=true){
if(userService.addUser(username,password,email)!
=null)
{
ActionContext.getContext().getSession().put("username",username);
return"success";
}
}
else
{
addActionError("该用户已存在,请换个用户名");
}
}
else
{
addActionError("验证码不匹配,请重新输入");
}
return"input";
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicStringgetVercode(){
returnvercode;
}
publicvoidsetVercode(Stringvercode){
this.vercode=vercode;
}
}
LoginAction.java代码如下:
packagecom.firstssh.action;
importjava.util.Map;
importcom.firstssh.model.User;
importcom.firstssh.service.IUserService;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;
publicclassLoginActionextendsActionSupport{
privateStringusername;
privateStringpassword;
privateStringvercode;
privateIUserServiceuserService;
publicvoidsetUserService(IUserServiceuserService){
this.userService=userService;
}
@Override
publicStringexecute()throwsException{
Mapsession=ActionContext.getContext().getSession();
Stringver2=(String)session.get("rand");
session.put("rand",null);
if(vercode.equals(ver2)){
Useruser=userService.loginValid(username,password);
if(user!
=null){
session.put("username",username);
return"success";
}else{
addActionError("用户名密码不匹配");
}
}else{
addActionError("验证码不匹配,请重新输入");
}
return"input";
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetVercode(){
returnvercode;
}
publicvoidsetVercode(Stringvercode){