`

struts2零配置之helloworld

 
阅读更多

 

从 Struts 2.1 开始,Struts 可以使用 Convention 插件来支持零配置:Convention 插件完全抛弃配置信息,不仅不需要使用 struts.xml 文件进行配置,甚至不需要使用 Annotation 进行配置。而是完全根据约定来自动配置。

 

首先,让我们先来看一下基于convention-plugin实现的Struts"零配置"的HelloWorld。

 

代码结构:

 


 

实现步骤:

 

1. 新建Dynamic Web工程 org.rabbitx.web.struts2.convention;

2. 把struts-2.3.15.3-all包中示例目录apps下的struts2-blank.war项目解压并把其lib下的所有jar包拷贝到新建工程的/WEB-INF/lib目录下;

3. 把struts-2.3.15.3\lib\struts2-convention-plugin-2.3.15.3.jar拷贝到新建工程的/WEB-INF/lib目录下;

4. 在/WEB-INF目录下添加web.xml文件;

    

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

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	<display-name>Struts2-Convention</display-name>
	
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

5. 在src目录下添加struts.xml文件(可以把struts2-blank.war项目中的struts.xml拷贝过来进行修改); 

     

<?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>
    <constant name="struts.devMode" value="true" />
</struts>

 

6. 在src目录下添加日志配置文件log4j.properties(此步骤非必须,主要是为了打印日志);

     

log4j.rootLogger=info,stdout,D,E

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=logs/log.log
log4j.appender.D.Append=true
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [%t:%r] - [%p]  %m%n

log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File=logs/error.log
log4j.appender.E.Append=true
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} 

org.apache.struts2=DEBUG
com.opensymphony.xwork2=DEBUG

 

7. 在src目录下新建package:org.rabbitx.web.struts2.convention.helloworld;

8. 在新建的package下添加Action类; 

     

package org.rabbitx.web.struts2.convention.helloworld;

import org.apache.log4j.Logger;

import com.opensymphony.xwork2.ActionSupport;

public class HelloworldAction extends ActionSupport {

	private static final long serialVersionUID = 2696798424098149935L;

	private Logger logger = Logger.getLogger(HelloworldAction.class);
	
	@Override
	public String execute() throws Exception {
		logger.info("------HelloworldAction-----execute-------");
		if(System.currentTimeMillis()%2 != 0)
		{
			logger.info("dispatcher to page: helloworld-error.jsp");
			return ERROR;
		}
		else
		{
			logger.info("dispatcher to page: helloworld.jsp or helloworld-success.jsp");
			return SUCCESS;
		}
	}
	
}

 

9. 在WEB-INF目录下添加目录content/convention/helloworld/;

10. 在目录WEB-INF/content/convention/helloworld/下添加jsp页面helloworld.jsp,helloworld-success.jsp和helloworld-error.jsp;

       

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.*" %>  
<%@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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts2-Convention</title>
</head>
<body>
    
    <h1>helloworld</h1>
    <hr/>
    <s:debug></s:debug>

</body>
</html>

    

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.*" %>  
<%@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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts2-Convention</title>
</head>
<body>
    
    <h1>helloworld-success</h1>
    <hr/>
    <s:debug></s:debug>

</body>
</html>

    

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.*" %>  
<%@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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts2-Convention</title>
</head>
<body>
    
    <h1>helloworld-error</h1>
    <hr/>
    <s:debug></s:debug>

</body>
</html>

 

11. 在eclipse中部署此应用并启动服务器;

12. 在浏览器中输入地址:http://localhost:8080/org.rabbitx.web.struts2.convention/convention/helloworld/helloworld.action;

13. 运行结果:刷新界面后,会随机显示helloworld-error或helloworld-success;

 

对于一个简单的helloWorld来讲,struts.xml里面的配置简直精简到了极致。不需要再写一堆一堆的<action>配置了。而我们需要做的只是加入一个struts2-convention-plugin-x.x.x.x.jar。

之所以在helloWorld中不需要任何配置,是因为struts2-convention-plugin进行了以下一系列的约定。 

 

[1] Action搜索范围约定:

    Convention plugin默认将包路径包含action,actions,struts,struts2的所有包都作为Action类的路径来搜索。

    可以通过设置struts.convention.package.locators属性来修改这个配置。Convention plugin默认的配置如下:

    <constant name="struts.convention.package.locators" value="action,actions,struts,struts2"/>

[2] Action认定约定:

     Convention plugin在上述的包及其子包中查找后缀为Action、或者实现了com.opensymphony.xwork2.Action的类,并把它当成Action处理。

     可以通过设置struts.convention.action.suffix属性来修改这个配置。Convention plugin默认的配置如下:

     <constant name="struts.convention.action.suffix" value="Action"/>   

[3] 结果资源约定:

     默认情况下, Convention plugin假设所有的results存放在WEB-INF/content/下。

     可以通过设置struts.convention.result.path进行修改。Convention plugin默认的配置如下:

     <constant name="struts.convention.result.path" value="/WEB-INF/content/"/>

      定位资源的约定是: actionUrl + resultCode suffix. 当某个逻辑视图找不到对应的视图资源时, Conversion 会自动试图使用 actionUrl 作为物理资源.即在找不到对应的action的情况下,也可以通过Action的URL(这里是/helloworld)找到对应的结果(/helloworld.jsp)。  

[4] 类名和Action URL之间的约定:

     Convention plugin会将com.example.struts.company.details.ShowCompanyDetailsAction 的struts后的子包转换成命名空间“/company/details/”,然后ShowCompanyDetailsAction中的“Action”后缀去掉,并将驼峰式的命名大写变小写,并在之间加上“-”(当然“-”也是Convention plugin默认的)最终形成/company/details/show-company-details。

[5] 包名和命名空间之间的约定:

      Convention plugin默认将actions、action、struts、struts2作为root Package,那么com.example.actions.MainAction的命名空间即为“/”,而com.example.actions.products.Display的命名空间为“/products”。 

 

  • 大小: 24 KB
分享到:
评论

相关推荐

    struts零配置HelloWorld-Annotation

    在“struts零配置HelloWorld-Annotation”这个项目中,我们将重点探讨如何利用注解来实现Struts2框架的配置,这对于初学者来说是一个很好的起点。 在传统的Struts2配置中,我们需要在`struts.xml`文件中手动定义每...

    Struts2零配置

    Struts2零配置是Struts2框架的一种简化配置方式,旨在减少XML配置文件的使用,提高开发效率。在传统的Struts2应用中,开发者需要在多个XML文件中配置Action、结果页面、拦截器等,而“零配置”则是对这种繁琐配置的...

    struts2 零配置

    "Struts2 零配置"是Struts2的一种特性,允许开发者在不编写大量XML配置文件的情况下,快速搭建和运行应用程序。这主要得益于Struts2的插件机制和注解支持。 首先,Struts2的零配置主要依赖于以下两个核心概念: 1....

    struts2零配置个人整理文档

    ### Struts2零配置个人整理文档 #### 一、Convention插件详解 ##### 1. 设置结果页面路径 - **背景介绍**:Struts2框架提供了便捷的方式来处理Web请求,并返回响应视图。为了简化配置过程,Struts2提供了一个名为...

    struts2零配置入门代码

    在“struts2零配置入门代码”这个主题中,我们将深入探讨如何在不编写大量XML配置文件的情况下,启动并运行一个基本的Struts2应用程序。 Struts2的核心在于它的Action类,它是业务逻辑处理的主要组件。在“零配置”...

    struts2学习笔记1-HelloWorld项目

    本篇学习笔记将引导我们从零开始,通过一个简单的"HelloWorld"项目,了解Struts2的基础知识。 首先,我们需要在本地环境中搭建Struts2的开发环境。这包括安装JDK、配置Java环境变量、下载Apache Struts2的最新版本...

    Struts2.1零配置——convention-plugin

    Struts2.1引入了Convention Plugin,以实现框架的零配置目标,替代之前的Codebehind Plugin。这个插件通过约定优于配置的原则简化了Struts2的应用开发,减少了XML配置文件的需求。以下是对Convention Plugin主要特性...

    Struts2 chm文档

    2.truts 2权威指南——第2章 Struts 2下的HelloWorld.doc 3.Struts 2权威指南——第3章 Struts 2基础.doc 4.Struts2.0系列(1-15) 5.Struts2中用Spring实现IoC.doc 6.Struts2中的零配置与CoC(Convention over ...

    struts-convention实现零配置

    Struts2 Convention 插件是Struts2框架的一个重要组件,自版本2.1起,它取代了Codebehind Plugin,旨在实现Struts2的零配置目标,简化开发流程。这个插件通过遵循一系列预定义的命名约定,自动地映射Action、结果...

    Starting Struts 2

    在"Starting Struts 2"和"深入浅出Struts 2"这两本书中,心梦帆影详细介绍了如何从零开始搭建Struts 2项目,包括环境配置、Hello World示例、Action与结果配置、拦截器使用、标签库应用等内容,旨在帮助读者快速上手...

    struts2从零开始(五)

    本篇文章将从零开始,逐步介绍如何使用Struts2进行开发,带你走进Struts2的世界。 首先,让我们理解Struts2的核心概念。Struts2是一个轻量级、可扩展的MVC框架,它继承了Struts1的优点并解决了其不足,如性能问题和...

    Struts2.0中文教程权威版

    Struts 2权威指南——第2章 Struts 2下的HelloWorld.doc Struts 2权威指南——第3章 Struts 2基础.doc 01 为Struts 2.0做好准备 02 常用的Struts 2.0的标志(Tag) 03 Struts 2.0的Action讲解 04 在Struts 2.0中国...

    struts2Demo

    struts2演示 &lt;br&gt;1./helloworld - helloworld 2./spring - 与spring整合 3./coc - 惯例优先配置,零配置文件 - codebehind不支持redirect,chain等操作,需要自己写jsp跳转 4./crud - CRUD,Create Read...

    struts2从零开始(七)

    本篇文章将从零开始介绍Struts2,帮助初学者快速上手。 在开始之前,确保你已经准备好了开发环境,包括Java JDK和IDE,例如Eclipse或IntelliJ IDEA。接下来,我们将通过创建一个简单的Struts2项目来理解其核心概念...

    Struts2入门教程_Struts2入门教程_skindzj_

    在实践中,学习Struts2应从创建第一个Hello World程序开始,理解Action的生命周期,学习如何通过配置文件或注解进行URL映射。然后,接触Interceptor,了解其工作原理和编写自定义拦截器的方法。接着,学习Struts2的...

Global site tag (gtag.js) - Google Analytics