Struts2 MVC架构

模型视图控制器(Model View Controller)或MVC,MVC是俗称。是一种软件设计模式,用于开发Web应用程序。模型 - 视图 - 控制器模式是由下面三个部分组成:

  • Model - 模型是负责维护数据最低级别。

  • View - 这是负责向用户显示的所有或部分数据。

  • Controller - 软件代码。控制模型和视图之间的相互作用。

MVC是受欢迎的,由于它从用户界面层,应用逻辑隔离,并支持关注点分离。在这里,控制器接收全部请求的应用和模型准备视图所须要的不论什么数据。

查看,然后使用编制的数据由控制器生成终于像样的回应。

MVC抽象能够以图形方式显演示样例如以下。

模型

该模型是负责管理应用程序的数据。它响应视图的请求,也响应从控制器的指示进行自我更新。

视图

在一个特定格式的数据,一个演示控制器的决定,显示数据所引发的。

他们是基于脚本的模板系统,如JSP,ASP。PHP,而且非常easy整合AJAX技术。

控制器

该控制器负责响应用户输入和运行数据模型对象的相互作用。控制器接收输入,验证输入。然后进行业务操作,改动数据模型的状态。

Struts2与Spring集成

Spring是一个流行的Web框架,它提供易于集成与非常多常见的网络任务。所以,问题是。为什么我们须要Spring。当我们有Struts2?Spring是超过一个MVC框架 - 它提供了很多其他好用的东西,这是不是在Struts。

比如:依赖注入能够是实用的不论什么框架。在本章中。我们将通过一个简单的样例来看看怎样集成Spring和Struts2一起。

首先。须要加入下列文件到项目的构建路径从Spring安装。

您能够下载并安装最新版本号的Spring框架从 http://www.springsource.org/download

  • org.springframework.asm-x.y.z.M(a).jar

  • org.springframework.beans-x.y.z.M(a).jar

  • org.springframework.context-x.y.z.M(a).jar

  • org.springframework.core-x.y.z.M(a).jar

  • org.springframework.expression-x.y.z.M(a).jar

  • org.springframework.web-x.y.z.M(a).jar

  • org.springframework.web.servlet-x.y.z.M(a).jar

最后增加struts2-spring-plugin-x.y.z.jar在WEB-INF/lib从struts的lib文件夹。假设使用的是Eclipse,那么可能会面临一个异常的java.lang.ClassNotFoundException异常:org.springframework.web.context.ContextLoaderListener。

为了解决问题,应该在一类依赖的标记标签右上点击高速修复公布/导出全部的依赖关系。最后,确保不存在依赖冲突标记“选项卡下。

如今让我们来设置web.xml中的Struts-Spring集成例如以下:

<?xml version="1.0" encoding="UTF-8"?

>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0"> <display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener> <filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

这里要注意的最重要的事情是我们已经配置了监听器。 ContextLoaderListener的须要载入Spring上下文文件。

Spring的配置文件名称为applicationContext.xml文件。它必须放置在同一水平web.xml文件

让我们创建一个简单的动作类称为User.java的两个属性 - firstName和lastName。

package com.yiibai.struts2;

public class User {
private String firstName;
private String lastName; public String execute()
{
return "success";
} public String getFirstName() {
return firstName;
} public void setFirstName(String firstName) {
this.firstName = firstName;
} public String getLastName() {
return lastName;
} public void setLastName(String lastName) {
this.lastName = lastName;
}
}

如今。让我们一起创造了applicationContext.xml spring 配置文件并创建实例User.java类。正如前面提到的,这个文件应该在WEB-INF目录下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="userClass" class="com.yiibai.struts2.User">
<property name="firstName" value="Michael" />
<property name="lastName" value="Jackson" />
</bean>
</beans>

正如上面看到的。我们已经配置了用户bean,我们放值MichaelJackson到bean。我们也给这个bean名称“userClass”,这样我们就能够重用在其它地方。接下来,让我们在WebContent目录中创建由user.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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>
<title>Hello World</title>
</head>
<body> <h1>Hello World From Struts2 - Spring integration</h1> <s:form>
<s:textfield name="firstName" label="First Name"/><br/>
<s:textfield name="lastName" label="Last Name"/><br/>
</s:form> </body>
</html>

由user.jsp文件相当直接。

它仅仅有一个目的 - 显示的名字和姓氏的用户对象的值。最后,让我们把全部的实体一起使用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="helloworld" extends="struts-default">
<action name="user" class="userClass"
method="execute">
<result name="success">/User.jsp</result>
</action>
</package>
</struts>

重要的是要注意的是,我们使用id userClass的引用类。这意味着。我们使用的是spring 做的User类的依赖注入。

如今右击项目名称,并单击Export > WAR File创建一个WAR文件。然后部署这个WAR在Tomcat的webapps文件夹下。

最后,启动Tomcatserver和尝试訪问URL http://localhost:8080/HelloWorldStruts2/User.jsp。这会给你下面画面:

如今我们已经看到了怎样将两个伟大的框架 Struts - Spring集成。

Struts2和Hibernate集成

Hibernate是一个高性能的对象/关系持久性和查询服务许可下的开源GNU通用公共许可证(LGPL),并免费下载。

在这一章中,我们要学习怎样实现Struts2与Hibernate集成。假设你不熟悉与Hibernate,那么能够查看我们的Hibernate教程

数据库设置:

在本教程中,我会使用“struts2_tutorial”MySQL数据库。

我连接到我的机器上使用这个数据库的username“root”,而且没有password。首先,你须要执行以下的脚本。此脚本创建称为student ,并创建一个新的表,此表中的记录数:

CREATE TABLE IF NOT EXISTS `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(40) NOT NULL,
`last_name` varchar(40) NOT NULL,
`marks` int(11) NOT NULL,
PRIMARY KEY (`id`)
); --
-- Dumping data for table `student`
-- INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
VALUES(1, 'George', 'Kane', 20);
INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
VALUES(2, 'Melissa', 'Michael', 91);
INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
VALUES(3, 'Jessica', 'Drake', 21);

Hibernate的配置:

接下来让我们创建这是Hibernate的配置文件hibernate.cfg.xml中。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">c
om.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://www.yiibai.com/struts_tutorial
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="com.yiibai.hibernate.Student" />
</session-factory>
</hibernate-configuration>

让我们通过hibernate的配置文件。首先,我们正在使用的MySQL驱动程序。然后,我们声明 JDBC URL连接到数据库。

然后,声明连接的username,password以及池的大小。我们也表示,我们希望“show_sql”转向真正看到SQL的日志文件里。请经过Hibernate教程。了解这些属性是什么意思。最后,我们设置了的映射类com.yiibai.hibernate.Student。我们将本章中创建。

环境设置:

接下来。这个项目须要一大堆的jar文件。附所需的JAR文件的完整列表的截图:

大部分的JAR文件能够作为Struts的分布的一部分。

假设有一个如GlassFish应用server,WebSphere或JBoss安装。那么能够得到的大部分jar文件从应用server的lib目录。假设没有,能够单独下载的文件:

其余的文件,应该可以从struts2的分发得到。

Hibernate 类:

如今让我们来创建Hibernate集成所需的Java类。下面内容Student.java:

package com.yiibai.hibernate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table(name="student")
public class Student { @Id
@GeneratedValue
private int id;
@Column(name="last_name")
private String lastName;
@Column(name="first_name")
private String firstName;
private int marks;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public int getMarks() {
return marks;
}
public void setMarks(int marks) {
this.marks = marks;
}
}

这是一个POJO类,Hibernate的规范表。它拥有属性id。firstName和lastName学生表中的列名相应。接下来让我们创建StudentDAO.java文件例如以下:

package com.yiibai.hibernate;

import java.util.ArrayList;
import java.util.List; import org.hibernate.Session;
import org.hibernate.Transaction; import com.googlecode.s2hibernate.struts2.plugin.\
annotations.SessionTarget;
import com.googlecode.s2hibernate.struts2.plugin.\
annotations.TransactionTarget; public class StudentDAO { @SessionTarget
Session session; @TransactionTarget
Transaction transaction; @SuppressWarnings("unchecked")
public List<Student> getStudents()
{
List<Student> students = new ArrayList<Student>();
try
{
students = session.createQuery("from Student").list();
}
catch(Exception e)
{
e.printStackTrace();
}
return students;
} public void addStudent(Student student)
{
session.save(student);
}
}

StudentDAO类。学生类是数据訪问层。它有一些方法来列出全部学生,然后保存一个新的学生记录。

动作类:

下面文件AddStudentAction.java定义我们的动作类。我们这里有两个动作方法 - execute() 和 listStudents()。

execute()方法是用来加入新的学生记录。

使用DAO的save()方法来实现这一目标。还有一种方法。listStudents()用来列出学生。

我们使用DAO的的列表方法得到全部学生的名单。

package com.yiibai.struts2;

import java.util.ArrayList;
import java.util.List; import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.yiibai.hibernate.Student;
import com.yiibai.hibernate.StudentDAO; public class AddStudentAction extends ActionSupport
implements ModelDriven<Student>{ Student student = new Student();
List<Student> students = new ArrayList<Student>();
StudentDAO dao = new StudentDAO();
@Override
public Student getModel() {
return student;
} public String execute()
{
dao.addStudent(student);
return "success";
} public String listStudents()
{
students = dao.getStudents();
return "success";
} public Student getStudent() {
return student;
} public void setStudent(Student student) {
this.student = student;
} public List<Student> getStudents() {
return students;
} public void setStudents(List<Student> students) {
this.students = students;
} }

实现ModelDriven接口你会注意到,这是用来当你的操作类处理一个详细的模型类(如学生),而不是个人属性(如名字,姓氏)。

的ModelAware接口须要实现的方法。以返回到模型。

在我们的样例中,我们返回“学生”对象。

创建视图文件:

如今让我们创建student.jsp视图文件包括下面内容:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World</title>
<s:head />
</head>
<body>
<s:form action="addStudent">
<s:textfield name="firstName" label="First Name"/>
<s:textfield name="lastName" label="Last Name"/>
<s:textfield name="marks" label="Marks"/>
<s:submit/>
<hr/>
<table>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Marks</td>
</tr>
<s:iterator value="students">
<tr>
<td><s:property value="firstName"/></td>
<td><s:property value="lastName"/></td>
<td><s:property value="marks"/></td>
</tr>
</s:iterator>
</table>
</s:form>
</body>
</html>

很easystudent.jsp。在上面的部分,我们有一个形式提交到“addStudent.action”。这须要在名字,姓氏和备注。由于addStudent 动作,自己主动绑到ModelAware的“AddSudentAction”,将创建一个学生bean的名字,姓氏和标记自己主动填充的值。

在底部,我们去通过的学生名单(见AddStudentAction.java)。我们遍历列表和显示的值在表中的姓氏,名称和备注。

Struts 配置:

让我们把它放在一起使用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="myhibernate" extends="hibernate-default"> <action name="addStudent" method="execute"
class="com.yiibai.struts2.AddStudentAction">
<result name="success" type="redirect">
listStudents
</result>
</action> <action name="listStudents" method="listStudents"
class="com.yiibai.struts2.AddStudentAction">
<result name="success">/students.jsp</result>
</action> </package> </struts>

这里要注意的最重要的事情是,我们包函“myhibernate”扩展Struts2默认包称为“hibernate-default”。然后我们声明两个动作 - addStudent和listStudents。

addStudent调用execute()上AddStudentAction类,然后,它调用listStudents操作方法successs。

listStudent动作方法调用listStudents()上AddStudentAction类作为视图,并使用student.jsp

如今右击项目名称。并单击Export > WAR 文件创建一个WAR文件。然后部署这个WAR在Tomcat的webapps文件夹下。

最后,启动Tomcatserver和尝试訪问URL http://localhost:8080/HelloWorldStruts2/student.jsp。这会给你下面画面:

在上面的部分,我们得到的一种形式,进入一个新的学生记录和底部列出了学生在数据库中的值。继续并加入一个新的学生记录。按提交。屏幕将刷新并显示您的更新列表。

Struts(19)Struts集成的更多相关文章

  1. Struts学习之集成Ajax

    转自:http://blog.csdn.net/hanxuemin12345/article/details/38782213 一,引题 1,Json数据格式简介 JSON是脱离语言的理想的数据交换格 ...

  2. Struts2中有关struts-default.xml,struts.xml,struts.properties文件详解

    1) struts-default.xml 这个文件是struts2框架默认加载的配置文件.它定义struts2一些核心的bean和拦截器. <?xml version="1.0&qu ...

  3. 【Struts】Struts框架配置详解

    1.首先将所必须的Jar包放到项目的WebRoot/WEB-INF/lib目录下. 如果你没有这些Jar文件,你可以到Struts官网上下载:http://struts.apache.org/.因为经 ...

  4. 菜鸟学习Struts——配置Struts环境

    刚开始学习Struts,它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品. 要用到Struts就要学会配 ...

  5. struts(三)——struts框架实现登录示例

    前两篇讲解了struts框架的基本实现,自己感觉讲的也有些枯燥,今天拿登录的例子来做一个实现. 1.新建一个javaweb项目,并将struts的jar包拷贝到WebRoot/WEB-INF/lib下 ...

  6. Struts 1 Struts 2

    Key Technologies Primer https://struts.apache.org/primer.html Threads With Struts 1 you were require ...

  7. Spring+Struts集成(方案一)

    SSH框架是现在非常流行的框架之一,本文接下来主要来对Spring和Struts的集成进行展示. 集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象. 集 ...

  8. Spring+Struts集成(第二种方案)

    在上一篇文章中我们了解到了第一种Spring跟Struts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入 ...

  9. Struts+Hibernate+Spring面试题合集及答案

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 ...

  10. Struts+Hibernate+Spring面试题合集及答案(转)

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring 面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 ...

随机推荐

  1. HDU 1757

    简单的矩阵构造题,参看我前几篇的谈到的矩阵的构造法. #include <iostream> #include <cstdio> #include <cstring> ...

  2. JAVAEE之--------过滤器设置是否缓存(Filter)

    在网页中.每次的client訪问server.有部分不用反复请求.如有些图片,视频等就没有必要每次都请求,这样会让server增大工作量.为了防止这样.我们採用过滤器来设置client是都缓存. 參考 ...

  3. Error: CompareBaseObjectsInternal can only be called from the main thread

    Posted: 01:39 PM 06-17-2013 hi, we're working on a project where we need to do some calculations on ...

  4. pthread_create()创建线程时传入多个參数

    因为接口仅仅定义了一个入參void *arg int pthread_create(pthread_t *tidp,const pthread_attr_t *attr, (void*)(*start ...

  5. 精美viso制图(1)

    office组件中的viso是一款十分强大的绘图工具,在绘制流程图.结构框图时显得十分方便,这里将我自己绘制的一些viso图(大部分都是用在我自己的论文中的)与大家分享一把. 1.深度学习训练流程图 ...

  6. eclips 手机 offline

    [退出eclipse] [进入eclipse的工作区间] [删除 .metadata文件夹,确保 .metadata文件夹得隐藏文件也要删除] [重启eclipse,并重新导入你的工程]

  7. Java-MyBatis:MyBatis 3 | SQL 语句构建器类

    ylbtech-Java-MyBatis:MyBatis 3 | SQL 语句构建器类 1.返回顶部 1. SQL语句构建器类 问题 Java程序员面对的最痛苦的事情之一就是在Java代码中嵌入SQL ...

  8. SOAPUI 安装及破解

    转自:https://blog.csdn.net/henni_719/article/details/79000130 先下载SOAPUI,我这里用的是5.1.2 PRO  版 下载路径:http:/ ...

  9. Centos下MongoDB数据库的安装以及配置开机自启动(三)

    最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 在服务器上完全可以用yum来安装管 ...

  10. 嵌入式Linux基础知识

    一.构建嵌入式开发环境 1.编译bootloader并烧写到板子中---uboot, 可以自己定制bootloader and logo 2.编译file system 并烧写--内嵌APP 3.编译 ...