Struts2 连接数据库总结

了解MVC模式

MVC 是一种使用MVC                         Model View Controller模型-视图-控制器设计创建Web 应用程序的模式[1] 

大一时的笔记:现在写成博客,有些知识点看到想笑哈哈,给刚学的看看吧!

  •  
  •  
  •  
  •  

Model 模型 表示应用程序核心 比如数据库记录列表

View 视图 显示数据 数据库记录

Controller 控制器 处理输入 写入数据库记录

MVC    模式同时提供了对HTMLCSS 和JavaScript 的完全控制

Model 模型是应用程序中用于处理应用程序数据逻辑的部分通常模型对象负责在数据库中存取数据

View   视图是应用程序中处理数据显示的部分   通常视图是依据模型数据创建的

Controller 控制器是应用程序中处理用户交互的部分  通常控制器负责从视图读取数据控制用户输入并向模型发送数据

MVC  分层有助于管理复杂的应用程序因为您可以在一个时间内专门关注一个方面例如您可以在不依赖业务逻辑的情况下专注于视图设计同时也让应用程序的测试更加容易

MVC 分层同时也简化了分组开发不同的开发人员可同时开发视图控制器逻辑和业务逻辑

 

视图

    视图是用户看到并与之交互的界面对老式的Web应用程序来说视图就是由HTML元素组成的界面在新式的Web应用程序中HTML依旧在视图中扮演着重要的角色但一些新的技术已层出不穷它们包括Adobe Flash和像XHTMLXML/XSL,WML等一些标识语言和Web services.

    MVC好处是它能为应用程序处理很多不同的视图在视图中其实没有真正的处理发生不管这些数据是联机存储的还是一个雇员列表作为视图来讲它只是作为一种输出数据并允许用户操纵的方式

模型

    模型表示企业数据和业务规则MVC的三个部件中模型拥有最多的处理任务例如它可能用像EJBsColdFusion Components这样的构件对象来处理数据库被模型返回的数据是中立的就是说模型与数据格式无关这样一个模型能为多个视图提供数据由于应用于模型的代码只需写一次就可以被多个视图重用所以减少了代码的重复性

控制器

    控制器接受用户的输入并调用模型和视图去完成用户的需求所以当单击Web页面中的超链接和发送HTML表单控制器本身不输出任何东西和做任何处理它只是接收请求并决定调用哪个模型构件去处理请求然后再确定用哪个视图来显示返回的数据

 

简单总结MVC的概念:

    V:处理简单的jsp页面(视图)

    M:后台的一些Model,处理客户端发送的请求

    C:各种各样的action,由C来控制VM之间的通讯,然后把ModelView的耦合度解开来!(“谁来控制我到哪个视图去”)

百度举例子:

    通常一般写jsp程序都是jsp请求 servlet 然后servlet返回数据给jsp,对吧?这样的话 servlet中要查询数据库和处理业务逻辑了...

    但是呢,这样的话servlet就会乱七八糟的什么代码都有了,对吧?

    这个时候,我又想起来MVC模式了 ...jsp 就是天生的展示数据和输入数据用的 ...可以看做MVC V。。。。。。。。。。。

    servlet呢,这个时候我把在servlet中连接数据库的代码独立出来放到一个java类里面去,servlet只要要调用这个类就直接拿到结果显示给jsp。这样,servlet就变成MVC C了,而那个处理数据库的java类就变成MVC M。。。。。。

 

 

 

控制反转与依赖注入

关于控制反转和依赖注入的文章和书籍很多,对其定义也解释的也仁者见仁,这里就不赘述了,这是本人(只代表个人观点)理解之后用通俗的例子和平淡的话词为您解释,希望对您有所帮助:

控制反转(IoC/Inverse Of Control):  调用者不再创建被调用者的实例,由spring框架实现(容器创建)所以称为控制反转。

依赖注入(DI/Dependence injection) :   容器创建好实例后再注入调用者称为依赖注入。

当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例,。如果创建被调用者实例的工作不再由调用者来完成,而是由外部容器完成,因此称为控制反转创建被调用者 实例的工作通常由外部容器来完成,然后注入调用者,因此也称为依赖注入。下面一个小实例:

定义一个接口 

public interface Person {

               void sayHello(); 

        }

第一个实现类:

public class Chinese implements Person {

             public void sayHello() {

                    System.out.println("您好 !");

             }

      }

第二个实现类: 

public class American implements Person {

     public void sayHello() {

                 System.out.println("How do you do .");

            }

}

 

注意这个类与传统设计有什么区别:该类调用Person子类的方法,传统设计在本类中创造实例,而在此类里并没有创造实例

public class User {

           Person p;

            public Person getP() {

                return p;

           }

            //使用setter注入

          public void setP(Person p) {

              this.p = p;

          } 

          

//调用person子类重写的sayHello方法,这里的p并没有实例化

    public void function(){

              p.sayHello();

            }

}

 

外部‘容器’

public class Container{

    public static User getBean(){   

        Person p=new Chinese();

        User user = new User();

         //由容器‘注入’实例

        user.setP(p);

        return user;

    }

}

 

测试类:

public class Test{

    public static void main(String[] args){

           User user = Container.getBean();

           user.function();

    }

}

//后台输出‘您好’

通过这个例子应该看懂了控制反转,和依赖注入了吧,这个是不是与传统设计相‘反了’。

 

相关知识

        依赖和耦合(Dependency and Coupling

        如果模块A调用模块B提供的方法,或访问模块B中的某些数据成员(当然,在面向对象开发中一般不提倡这样做),我们就认为模块A依赖于模块B,模块A和模块B之间发生了耦合。那么,依赖对于我们来说究竟是好事还是坏事呢?由于人类的理解力有限,大多数人难以理解和把握过于复杂的系统。把软件系统划分成多个模块,可以有效控制模块的复杂度,使每个模块都易于理解和维护。但在这种情况下,模块之间就必须以某种方式交换信息,也就是必然要发生某种耦合关系。如果某个模块和其它模块没有任何关联(哪怕只是潜在的或隐含的依赖关系),我们就几乎可以断定,该模块不属于此软件系统,应该从系统中剔除。如果所有模块之间都没有任何耦合关系,其结果必然是:整个软件不过是多个互不相干的系统的简单堆积,对每个系统而言,所有功能还是要在一个模块中实现,这等于没有做任何模块的分解。

因此,模块之间必定会有这样或那样的依赖关系,永远不要幻想消除所有依赖。但是,过强的耦合关系(如一个模块的变化会造成一个或多个其他模块也同时发生变化的依赖关系)会对软件系统的质量造成很大的危害。特别是当需求发生变化时,代码的维护成本将非常高。所以,我们必须想尽办法来控制和消解不必要的耦合,特别是那种会导致其它模块发生不可控变化的依赖关系。依赖倒置、控制反转、依赖注入等原则就是人们在和依赖关系进行艰苦卓绝的斗争过程中不断产生和发展起来的。

 

 

 

Struts2标签知识:

Include标签:包含的意思。

默认Action(default_Action):    <default-action-ref name="index"></default-action-ref>

默认action的作用:项目后面链接输入不正确会链接到指定的默认action里面。

Action的转发

全局标签<global-results></global-results>

全局标签的作用:把共同或者相同部分抽取出来共享,减少配置的繁杂。(图片实例为抽取出共同的返回结果页面)

extends标签

extends标签的作用:继承公共的特性,减少配置的繁杂。(例如:权限模块、收银模块、管理员模块都需要一个404页面,用extends继承指定的package(包名)减少配置。)

动态的结果(result)

redirect 重定向

redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。可以通过返回结果后面带参数,如下:

 

<a href=“”></a>超链接带参传值

如下:

Jsp页面:

Java代码:

Struts.xml配置:

Struts2动态方法的访问

(下面给出的3个例子注意不同之处和区别在哪)

该属性设置Struts2 是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。以下设置参数值可以在struts2-core.jar中org.apache.struts下的default.properties文件中查到

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

例子1:<a href="login!add"></a>

Jsp页面:

Java代码:

Struts.xml配置

例子2:<a href="loginadd"></a>

Jsp页面:

Java代码:

struts.xml配置:

例子3:<a href="Login_add"></a>

(此种链接要注意大小写)

Jsp页面:

Java代码:

struts.xml配置:

DomainModel(域模型)

使用DomainModel(域模型)接收参数

    a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法;

    b.接收:通过对象的属性接收参数,如:user.getUserName();

    c.发送:使用对象的属性传递参数,如:user2!add?user.userName=MGC;

例子:

Jsp页面:

发送:使用对象的属性传递参数,如:user2!add?user.userName=MGC;

Java代码:

接收:通过对象的属性接收参数,如:user.getUserName();不需要new)

struts.xm配置

例图:

DomainModel作用:

这种方法是我们开发项目时最为常用的,对于一个属性相对比较对的时候,如果把属性都写到Action中,那会把Acton类弄的很乱,所以属性较多的时候最好选择第二种方式来接收用户输入参数。 

 

ModelDriven(模型驱动)

ModelDriven定义:

       在页面中,这个模型对象中的属性可以直接通过属性名来访问(如username),而不需要使用形如“user.username”这种格式的表达式。

ModelDriven作用:

这种方法是我们开发项目时最为常用的,对于一个属性相对比较对的时候,如果把属性都写到Action中,那会把Acton类弄的很乱,所以属性较多的时候最好选择此方式来接收用户输入参数。

ModelDriven注意要点:

在action中也不需要为这个模型对象提供JavaBean风格的getter和setter方法。但是必须要在action中进行new操作和实现getModel方法并返回给泛型对象,ModelDriven要使用泛型哦!

例子:

Jsp页面:

Java代码:

struts.xml配置

例图:

Struts2与数据库连接交互

类:

User.java  ------封装User的信息(如:private、setXxx、getXxx)。

UserDAO.java-----User管理类,含有调用连接数据库进行增删改查等功能操作类。

DBConn.java-----连接数据库的类。

UserLoginAction.java-----封装获取页面请求信息的Action类。

 

整个请求到返回的流程:

首先UserLoginAction类获取客户端用户发过来的请求信息namepassword。在本类对与客户端交互的某些信息进行封装、setXxxgeXtxx方法),接着UserLoginAction类会调用UserDAO类的checkUser(name,password)方法进行数据库的查找(checkUser方法里会调用DBConn类的getConn()方法进行数据库的加载和连接操作,倘若连接成功,UserDAO.preparedStatement..executeQuery()方法进行语句查找)。把找到匹配的信息赋值给new User(而User里可以通过User.setName(rs.getString(“name”))方法把拿到的信息放到setName方法里。),最后,checkUser方法返回一个UserUserLoginAction类里的execute()方法定义一个User来获取checkUsername,password方法返回的User

 

 

 

时间: 2024-08-06 11:55:50

Struts2 连接数据库总结的相关文章

10.Struts2连接数据库

链接数据库的两种方式: 1.在Action中连接数据库 2.使用工具类连接数据库 1.在Action中连接数据库 源码文档目录如图所示: 1.建立数据库 数据库建立语句: create database aynu; use aynu; SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `person` -- ---------------------------- DROP TABLE

【J2EE核心开发学习笔记 003】struts2的搭建及连接数据库实现用户注册与登录

搭建struts2是重点,搭建这个框架有些麻烦,遇到不少的问题,终于一一解决,写在此处,以作备忘. 1.  首先要下载struts2的一些组件,我下载的版本是struts-2.3.28.1,MyEclipse是Version: 2014版本的.由于版本的不断升级,导致在搭建的过程中,和过去相对较旧的版本搭建有了一些差别,不过问题不是很大.这里是下载的struts2的地址:http://struts.apache.org/download.cgi#struts25 2.  解压下载的组件我们可以看

SSH Struts2+hiberante+Spring整合

使用SSH框架编写学生信息: 一.新建Java工程: (1)建立好Java各层级之间的结构:业务处理层dao,数据模型层domain,页面请求处理层(Struts2 MVC层)action,service层. (2)建立好各层的实现类及接口; (3)建立一个source folder文件夹,用来存放一些配置问价. (4)改变字节码生成的位置,改为WEB-INF下面的classes文件夹下. Java工程层级结构如下图: 二.hibernate整合到Spring容器中 步骤: 1.编写domain

3、mybatis动态sql+struts2(通配符+全局配置+分页)

1.创建userinfo.sql数据库脚本 1 create table USERINFO 2 ( 3 id NUMBER not null, 4 uname VARCHAR2(20), 5 password VARCHAR2(20), 6 age NUMBER 7 ) 8 ; 9 alter table USERINFO add primary key (ID); 10 11 create sequence seq_userinfo; 12 13 insert into USERINFO (i

浅谈struts2的国际化----i18n

可能大家在使用struts框架的时候,偶尔会看到这个词: i18n.也就是 Internationalization    i 开头,n 结尾, 总共18个字母,今天的主要内容就是围绕这 四个字母. struts2国际化是建立在 java 国际化的基础上的,通过提供不同国家.语言环境的消息资源,然后通过 ResourceBundle 加载指定Locale 对应的资源文件,取得文件中指定的 key 对应的信息. Locale 对象表示了特定的地理.政治和文化地区.需要 Locale 来执行其任务的

EasyUI、Struts2、Hibernate、spring 框架整合

经历了四个月的学习,中间过程曲折离奇,好在坚持下来了,也到了最后框架的整合中间过程也只有自己能体会了. 接下来开始说一下整合中的问题和技巧: 1,  jar包导入 c3p0(2个).jdbc(1个).spring(15个).Hibernate(10个).Struts2(13个).json(3个) 及EasyUI的jquery包 2, 在src目录下新建一个实体类的包,并新建一个实体类 package com.han.entity; import java.util.Date; public cl

如何理解struts2

Struts2框架是一个MVC模型 M(model):JavaBean+business(业务类) V(view):JSP C(control):Action 我的理解是,使用了Struts2框架,字段被封装起来,方法也都写在了一起,使得代码结构比较清晰.一个大对象(比如用户.留言.订单)对应一个JavaBean,一个JavaBean对应一个business业务类,business业务类里面写该对象的增删改查功能. 以登录功能为例: 第一步:封装字段——JavaBean(loginbean) 第

基于Struts2+Hibernate的Criteria多条件查询

Hibernate 定义了CriteriaSpecification接口规范用来完成面向对象的条件查询,Criteria 和 DetachedCriteria 就是CriteriaSpecification的子接口. 在进行本篇的内容之前,我们先来大致说一说Criteria 和 DetachedCriteria 的主要区别: Criteria 和 DetachedCriteria 的创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的:而 D

struts2+spring+hibernte整合示例

简单实现添加用户功能,仅供初学者参考,可自行扩展程序功能(增删改查). 这里贴下代码,需要的可以下载看(因为比较懒). applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.spri