在Struts2的Model-View-Controller模式实现下面五个核心组件:

  1. 动作-Actions

  2. 拦截器-Interceptors

  3. 值栈/OGNL

  4. 结果/结果类型

  5. 视图技术

Struts 2和传统的MVC框架有些不同,在该框架中的作用的模式,而不是控制器的作用略有不同。尽管有一些重叠。

这是Struts的MVC模式的体系结构概述。

上图描写叙述了Struts2的高层体系结构模型。视图和控制器。

一个Struts2的调度Servlet过滤器和拦截器与控制器实现。该模型实现的动作和视图的组合的结果类型和结果。

值栈和OGNL提供了共同点,其它部件之间的连接和集成。

除了从上述组分中,将有一个特定的信息。涉及到配置。为Web应用程序的配置,以及配置的行动,拦截器,结果等。

基于上述数据图,能够解释用户的请求的生命周期在Struts 2例如以下所看到的:

  1. 用户的请求发送到server,用于请求某些资源(即页面)。

  2. 该过滤器调度的要求和确定适当的动作。

  3. 配置拦截器的功能适用于如验证。文件上传等。

  4. 选择的动作运行。运行所请求的操作。

  5. 相同。配置拦截器做不论什么后期处理,假设须要的话。

  6. 最后的结果是由视图准备。而且将结果返回给用户。

下载而且解压struts之后能够把lib文件夹下的一下文件拷贝到我们的项目WEB-INF\lib 文件夹. 要做到这一点。你能够简单地将下降到WEB-INF\lib文件夹中的全部下列文件。(以下是最小依赖集)

  • commons-fileupload-x.y.z.jar

  • commons-io-x.y.z.jar

  • commons-lang-x.y.jar

  • commons-logging-x.y.z.jar

  • commons-logging-api-x.y.jar

  • freemarker-x.y.z.jar

  • javassist-.xy.z.GA

  • ognl-x.y.z.jar

  • struts2-core-x.y.z.jar

  • xwork-core.x.y.z.jar

创建动作类(Action Class):

Action类是Struts 2的应用程序的关键,我们实现了大部分的Action类中的业务逻辑。

Action类来响应用户的操作。当用户点击一个URL。
Action类中的一个或多个方法被运行。并返回一个字符串结果。基于结果的值,一个特定的JSP页面的呈现方式。

package com.tutorialspoint.struts2;

public class HelloWorldAction{
private String name; public String execute() throws Exception {
return "success";
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

Struts2框架的HelloWorldAction类将创建一个对象并调用execute方法来响应用户的操作。运行业务逻辑里面的execute方法,并终于返回字符串常量。

简单地说,为每一个URL你必须运行一个动作类,或者能够直接使用这个类的名称作为操作名,也能够映射到一些其它的名称使用struts.xml文件。例如以下图所看到的。

创建视图(View)

我们须要一个JSP提交最后的消息,这个页面会使用在Struts 2框架中提前定义的动作时。这将会发生在struts.xml文件里定义的映射。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World, <s:property value="name"/>
</body>
</html>

taglib指令告诉Servlet容器中。这个页面将使用Struts2标签。这些标签之前。将通过s。

s:property标签显示动作类‘name’的属性值,是调用HelloWorldAction
类的方法getName()。

接下来创建一个主页面:

我们还须要在WebContent目录中创建index.jsp页面文件。

该文件将作为初始动作URL。用户能够直接点击告诉Struts2框架调用的HelloWorldAction类定义的方法并渲染HelloWorld.jsp视图。

这里可能会遇到一个问题:

web项目无法部署到eclipse配置的本地tomcat

一、发现问题

在eclipse中新建Dynamic Web Project。配置好本地的tomcat并写好代码后选择Run on Server,但执行后发如今tomcat的安装文件夹下的webapps并没有出现所建立的project名字。

二、验证

非常明显项目并没有自己主动部署到Tomcat的Webapps中而是部署在了别的容器中。

在内置浏览器中输入http://localhost:8080/webDemo/login.jsp可正常打开。但在外部浏览器上打开http://localhost:8080时确没有出现所期望的小猫画面。

三、原因

eclipse不像MyEclipse默认将项目部署到tomcat安装文件夹下的webapps中,而默认部署到工作文件夹下

的.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps中,tmp1目录里面存放着该项目的信息。

四、改动

为了使项目默认部署到tomcat安装文件夹下的webapps中。show view—>servers—>找到须要改动的tomcat—>右击 ①停止eclipse内的Tomcat服务器(stop) ②删除该容器中部署的项目(add and remove) ③清除该容器相关数据(clean) ④打开tomcat的改动界面(open)

⑤找到servers location,选择第二个(User tomcat Installation) ⑥改动deploy path为webapps ⑦保存关闭

须要说明的是①②③必须操作。否则以下的步骤会被置灰无法操作。

还会遇到还有一个错误就是在jsp的開始会有JavaWeb:报错信息The
superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

原来Javawebproject类中没有加入Tomcat执行时相关类导致。
以下是详细的解决方法:
1、右击webproject-》属性或Build
Path-》Java Build Path->Libraries-> Add Libray...->Server Runtime -》Tomcat Server
2、切换到Java
Build Path界面中的Orader and Export,选择Tomcat。

主页面的代码例如以下(index.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</h1>
<form action="hello">
<label for="name">Please enter your name</label><br/>
<input type="text" name="name"/>
<input type="submit" value="Say Hello"/>
</form>
</body>
</html>

hello动作定义在上面的视图文件将被映射到HelloWorldAction类和它的运行方法使用struts.xml文件。当用户点击“提交”button,它会导致Struts2框架运行的运行方法定义在当中,HelloWorldAction类和方法的返回值的基础上。将对应的视图选择和呈现的一个响应。

配置文件

我们须要一个映射,以配合URL。HelloWorldAction类(模型)。HelloWorld.jsp(视图)。映射告诉Struts 2框架的类将怎样响应用户的操作(URL),这一类的方法将被运行。在该方法返回的基础上选择什么视图来显示字符串结果。

<?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="hello" class="com.tutorialspoint.struts2.HelloWorldAction" method="execute">
<result name="success">/Hello.jsp</result>
</action>
</package>
</struts>

在这里,我们设置struts.devMode为true,由于我们正在努力开发环境,我们须要看到一些实用的日志消息。

然后,我们定义了一个包叫做 helloworld.

当你想要将动作类放入当中时创建一个包是实用的。在我们的样例中,我们的action命名为“hello”,这是对应的URL是/hello.action和备份为HelloWorldAction.class.HelloWorldAction.class中execute方法是时执行的URL的方法/hello.action被调用.
假设execute方法返回"success",
然后我们把用户引到HelloWorld.jsp.

下一步是创建一个web.xml文件这是不论什么请求发送到Struts2的一个切入点。Struts2的应用程序的入口点,将是一个部署描写叙述符(web.xml)中定义的过滤器。

在web.xm文件里,我们定义一个过滤器org.apache.struts2.dispatcher.FilterDispatcher. web.xml文件须要创建WEB-INF目录下的WebContent。 Eclipse在创建项目时已经创建了一个web.xml文件。所以,让我们仅仅须要改动例如以下:

<?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>
<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>

我们已经指定index.jsp是我们主页的文件。我们已经配置Struts2的过滤器上执行的全部URL (i.e, any url that match the pattern /*)

启用具体的日志:

您能够启用完整的日志记录功能,通过创建工作和Struts2同一时候创建logging.properties文件在 WEB-INF/classes 文件,在属性文件里。请注意下面两行:

org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
java.util.logging.ConsoleHandler

默认logging.properties指定ConsoleHandler的路由记录到stdout和也的FileHandler。一个处理程序的日志级别阈值能够设置使用SEVERE,WARNING,INFO,CONFIG。FINE,FINER,FINEST或ALL。

就是这样。

我们已经准备好来执行我们的Hello World应用程序使用Struts 2框架。

以下还有几个须要注意的信息,最基本的是。出错以后要看出错信息。找到原因。如今遇到的问题归结为两个原因:

1)配置文件里的书写错误。

2)导包不全面。依照错误提示的导包即可。

版本号过期如图:

org.apache.struts2.dispatcher.FilterDispatcher 换成:

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

Struts2框架具体解释的更多相关文章

  1. struts2 框架处理流程

    struts2 框架处理流程 流程图如下: 注意:StrutsPrepareAndExecuteFilter替代了2.1.3以前的FilterDispatcher过滤器,使得在执行Action之前可以 ...

  2. [ SSH框架 ] Struts2框架学习之四(自定义拦截器)

    一.Struts2的拦截器 1.1 拦截器概述 拦截器,在AOP( Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截 ...

  3. 2018.12.19 Struts2 框架总复习

    总结Struts2 框架 struts2技术的优势 项目开源,使用及拓展方便 提供Exception处理机制 Result方式的页面导航,通过Result标签很方便的实现重定向和页面跳转 通过简单.集 ...

  4. struts2 框架 的环境搭建 与配置

    一,Struts2简介: 1,来由:Struts(金属支架),在程序中表示起支撑作用的通用程序代码,Struts2是在Struts1框架的基础上融合了WebWork优秀框架升级得到的. 2,解释:St ...

  5. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

  6. Struts2框架简介和示例

    struts2框架 Struts2是java web的框架,在Java Web开发中,表示层框架,其核心是通过扩展Servlet来帮助处理http请求. Struct2的基本流程 Struct2的框架 ...

  7. 搭建一个简单struts2框架的登陆

    第一步:下载struts2对应的jar包,可以到struts官网下载:http://struts.apache.org/download.cgi#struts252 出于学习的目的,可以把整个完整的压 ...

  8. Struts2框架之-注解开发

    Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...

  9. Struts2 框架的快速搭建

    方便myEclipse 手动配置Struts2框架,写下此文,需要的朋友拿走不谢~ 一.引入JAR包 WEB工程->WebRoot->WEB-INF->lib引入Struts2对应版 ...

随机推荐

  1. strace 使用

  2. MySQL where

    MySQL where 子句 我们知道从MySQL表中使用SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是SQL ...

  3. Unique Binary Search Tree

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  4. jquery mobile navbar

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  5. 自动化构建工具gulp

    1.优点 1.1 易于使用 通过代码优于配置的策略,gulp让简单的任务简单,复杂的任务可管理 1.2 构建快速 利用node.js流的威力,你可以快速构建项目并减少频繁的IO操作 1.3 插件高质 ...

  6. php面向对象编程--学习笔记

    1.声明一个类 在php中使用class关键字创建一个新类,类包括属性与方法.语法格式如下: <?php class类名{ 属性: 方法: } ?> 2.创建一个实例对象 创建对象的过程称 ...

  7. python使用platform模块获取系统环境并去除换行符

    近来在porting一个网站,企图拿到这个网站的数据来做分析.为了支持多系统环境的正常运行.需要知道当前系统环境的是什么OS? 1.python内置platform库.可以很方便得到当前系统环境时什么 ...

  8. 使用Code::Blocks配置Python编译环境

    1.先在CodeBlock中新建C或C++工程. CodeBlock新建工程步骤:File——New——Project——Console applications——C或C++都可——Project所 ...

  9. Egret 矢量绘图、遮罩、碰撞检测

    矢量绘图: 1. 为矢量绘图绘制外边 - graphics.lineStype() private createGameScene():void { console.log("Runtime ...

  10. iOS页面间传值的方式 (Delegate/NSNotification/Block/NSUserDefault/单例)

    iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)   iOS页面间传值的方式(NSUserDefault/Delegate/NSN ...