在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. java.lang.UnsupportedClassVersionError: Bad version number in .class file

    java.lang.UnsupportedClassVersionError: Bad version number in .class file造成这种过错是ni的支撑Tomcat运行的JDK版本与 ...

  2. div 显示滚动条

    overflow-x:auto    显示横向滚动条 overflow-y:hidden 隐藏纵向滚动条 引用此class,只显示横向的滚动条 .max{ margin:auto; overflow- ...

  3. Android开源项目 Universal imageloader 源码研究之Lru算法

    https://github.com/nostra13/Android-Universal-Image-Loader universal imageloader 源码研究之Lru算法 LRU - Le ...

  4. How JSP work.

    A JSP page exists in three forms: JSP source code: consists of a mix of HTML template code. Java lan ...

  5. Tempdb对SQL Server性能的影响

    转载文章,原文地址:http://www.cnblogs.com/laodao1/archive/2010/04/15/1712395.html1.SQL Server系统数据库介绍 SQL Serv ...

  6. XMPP基础

    概要 1.即时通讯技术简介2.XMPP诞生的由来3.XMPP特点4.XMPP的基本结构5.XMPP工作原理6.XMPP的优缺点7.OSI七层模型8.IP地址.端口号.传输协议9.TCP和UDP的区别1 ...

  7. js删除数组指定的某个元素

    1.给js数组对象原型加indexof方法 获得元素索引 Array.prototype.indexOf = function(val) { for (var i = 0; i < this.l ...

  8. Hibernate 一对多单向关联Demo

    以Classes[班级]和Student[学生]为例的Demo Classes .java public class Classes implements Serializable { private ...

  9. SpringMVC简单搭建与入门

    SpringMVC框架是spring框架的一个模块.springmvc和spring无需要通过中间整合层进行整合. 学习的时候,先了解一下流程至关重要,下面,简单介绍一下流程. 源码下载:http:/ ...

  10. underscorejs-reject学习

    2.9 reject 2.9.1 语法: _.reject(list, predicate, [context]) 2.9.2 说明: 前边我们已经学习了filter方法,那么我们在学习reject之 ...