拓展阅读
Java Servlet 教程-20-自己手写实现 spring mvc 整体思路
Java Servlet 教程-21-自己手写 spring mvc 简单实现
mvc-01-Model-View-Controller 概览
web mvc-05-JSF JavaServer Faces
web mvc-06-play framework intro
从零手写组件系列
Struts2
Apache Struts是一个用于创建优雅、现代Java Web应用程序的免费、开源的MVC框架。
Hello World
我的示例基于maven和struts2文档。
开始使用Struts2原型的推荐方式是使用原型目录。
mvn archetype:generate -DarchetypeCatalog=http://struts.apache.org/
Struts 2空白原型("blank-archetype")提供了一个最小但完整的Struts 2应用程序。
它演示了一些最基本的Struts 2概念。这是我的风格,我选择了这个。
使用
mvn clean install
来删除先前的文件并将JAR文件添加到您的存储库。
使用
mvn tomcat7:run
启动项目。或者将WAR文件放到Tomcat中。
<label class="label label-danger">错误</label>
您可能会遇到类似以下错误。
no plugin found for prefix 'tomcat 7' in the current project and in the plugin groups
<label class="label label-success">提示</label>
别担心,这是解决方法。打开pom.xml,将以下代码添加到plugins中。
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${plugin.tomcat.version}</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>${project.build.sourceEncoding}</uriEncoding>
</configuration>
</plugin>
并将此代码添加到properties中。
<plugin.tomcat.version>2.2</plugin.tomcat.version>
好了,享受Struts2之旅。
Configuration Files
web.xml
在web.xml
文件中,Struts定义了它的FilterDispatcher
,这是一个Servlet过滤器类,用于初始化Struts框架并处理所有请求。如下所示...
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="struts_blank" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
在上面的示例中,我们将Struts 2调度程序映射到/*
,因此Struts 2会处理所有传入的请求。这是因为Struts 2从其JAR文件中提供静态内容,包括Dojo JavaScript文件(如果使用S2.0或S2.1+中的Dojo插件)和用于生成HTML的Struts 2标签的FreeMarker模板。
自Struts 2.1.7以来,您可以提供一个逗号分隔的模式列表,当匹配请求URL时,过滤器将直接通过。这是通过配置选项struts.action.excludePattern
完成的,例如在您的struts.xml
中:
<struts>
<constant name="struts.action.excludePattern" value=".*unfiltered.*,.*\\.nofilter"/>
...
</struts>
您可能会问,struts.xml
是什么?
struts.xml
该框架的核心配置文件是默认的(struts.xml
)文件,应存放在Web应用程序的类路径上(通常是/WEB-INF/classes
)。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
<label class="label label-info">DTD</label>
DTD是文档类型定义,定义了XML文档的结构以及合法的元素和属性。
<label class="label label-info">include</label>
我们可以将一个大的struts.xml
文件分解成较小的部分吗?
- 您可以在
struts.xml
中的<package>
元素中交替使用<include>
元素。配置对象将按出现的顺序加载。框架从上到下读取配置并在引用时按顺序添加对象。
<struts>
<include file="example.xml"/>
...
</struts>
<label class="label label-info">Constant</label>
您可能会在struts.xml
中找到这些,这是常量。
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="true"/>
常量提供了一种通过定义修改框架和插件行为的关键设置来自定义Struts应用程序的简单方法。
<label class="label label-info">Packages</label>
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"/>
<action name="index">
<result>/index.html</result>
</action>
</package>
-
package
元素具有一个必需的属性,即name
,它充当稍后引用包的键。 -
namespace
属性将动作配置细分为逻辑模块,每个模块都有其自己的标识前缀。命名空间避免了动作名称之间的冲突。 -
extends
属性是可选的,允许一个包继承一个或多个先前包的配置。 -
action
映射可以指定一组结果类型、一组异常处理程序和一个拦截器堆栈。
struts.properties
所有属性也可以在XML配置文件中使用Constant Configuration进行设置。
属性列表可以在struts-default.properties
(在struts2.jar
中)中找到。
### Struts default properties
###(can be overridden by a struts.properties file in the root of the classpath)
###
### This can be used to set your default locale and encoding scheme
# struts.locale=en_US
struts.i18n.encoding=UTF-8
### Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
### The blank extension allows you to match directory listings as well as pure action names
### without interfering with static resources, which can be specified as an empty string
### prior to a comma e.g. struts.action.extension=, or struts.action.extension=x,y,z,,
struts.action.extension=action,,
### Set this to false if you wish to disable implicit dynamic method invocation
### via the URL request. This includes URLs like foo!bar.action, as well as params
### like method:bar (but not action:foo).
### An alternative to implicit dynamic method invocation is to use wildcard
### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
struts.enable.DynamicMethodInvocation = false
### when set to true, Struts will act much more friendly for developers. This
### includes:
### - struts.i18n.reload = true
### - struts.configuration.xml.reload = true
### - raising various debug or ignorable problems to errors
### For example: normally a request to foo.action?someUnknownField=true should
### be ignored (given that any value can come from the web and it
### should not be trusted). However, during development, it may be
### useful to know when these errors are happening and be told of
### them right away.
struts.devMode = false
网友评论