Статьи

Struts 2 и аннотации

Погуглив, я увидел, что не было краткой статьи, объясняющей, как интегрировать Struts 2 с аннотациями. Я сделаю это настолько простым, насколько это возможно, потому что разработчики Struts проделали потрясающую работу, чтобы сделать его настолько простым, насколько они могут. Я создам пример проекта maven, показывающий вам, как интегрировать стойки 2.

Хорошо, во-первых, давайте продолжим и создадим наш проект maven. Я иду с проектом maven, потому что проще создать войну и зависимости, необходимые для структур. Итак, ниже мой корневой проект pom;

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">



<modelVersion>4.0.0</modelVersion>

<groupId>com.myexamples</groupId>

<artifactId>my-struts-sample</artifactId>

<packaging>war</packaging>

<version>1.0-SNAPSHOT</version>

<name>My Struts Example</name>

<dependencies>









<dependency>

<groupId>javax</groupId>

<artifactId>javaee-api</artifactId>

<version>6.0</version>

<scope>provided</scope>

</dependency>









<dependency>

<groupId>commons-collections</groupId>

<artifactId>commons-collections</artifactId>

<version>3.2.1</version>

</dependency>



<dependency>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

<version>1.1.1</version>

</dependency>



<dependency>

<groupId>commons-configuration</groupId>

<artifactId>commons-configuration</artifactId>

<version>1.6</version>

</dependency>



<dependency>

<groupId>commons-lang</groupId>

<artifactId>commons-lang</artifactId>

<version>2.5</version>

</dependency>









<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.5.2</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.16</version>

<scope>provided</scope>

</dependency>





<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.8.1</version>

<scope>test</scope>

</dependency>









<dependency>

<groupId>com.sun</groupId>

<artifactId>tools</artifactId>

<version>1.4.2</version>

<scope>system</scope>

<systemPath>${java.home}/../lib/tools.jar

</systemPath>

</dependency>



<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

<version>2.0.6</version>

</dependency>











<!-- standard.jar -->

<dependency>

<groupId>taglibs</groupId>

<artifactId>standard</artifactId>

<version>1.1.2</version>

</dependency>



<!-- JSTL -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

<version>1.1.2</version>

</dependency>







</dependencies>



<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>

<version>2.0</version>

<configuration>



<archive>

<manifest>

<addClasspath>true</addClasspath>

<classpathPrefix>lib/</classpathPrefix>

</manifest>

</archive>

<webResources>

<resource>

<!-- this is relative to the pom.xml directory -->

<directory>${project.basedir}/resources

</directory>



</resource>

</webResources>

<outputDirectory>${env.JBOSS_HOME}/server/default/deploy</outputDirectory>

<warName>my-struts-sample</warName>

</configuration>

</plugin>

</plugins>

</build>



</project>

Структура проекта будет следующей;

 

    my-struts-sample
|
|
--------->pom.xml
|
|
----->resources
| |
| |
| ----->js
|
----->src
|
|
------->main
|
|
----->webapp
|
|
------->index.html
|
|
------->WEB-INF
|
|
------>web.xml
|
|
------>jsp
|
|
------>test
|
|
---->test.html

Это нормальная структура любого проекта Maven. Это создаст файл войны и развернет его в вашем jboss, как я уже упоминал, чтобы получить его от JBOSS_HOME в моем pom.xml. Вы можете изменить его, как вам нужно, в зависимости от вашего сервера.

После этого давайте создадим наш первый класс действий, приведенный ниже;
 

package com.test..myexample;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import org.apache.struts2.interceptor.ServletRequestAware;

@Results({
@Result(name="success", value="/public/showTest")
})

public class ShowTestAction implements ServletRequestAware{

private HttpServletRequest request;

public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

public String execute(){
return "success";
}
}

 

Это простой класс действий. Несколько вещей, чтобы отметить здесь. Имя вашего класса Action всегда должно заканчиваться именем Action, иначе оно не будет распознано как класс действия на этапе сканирования пакета, который я объясню позже. Пока я только возвращаю успех . Вы можете добавить больше результатов, если сочтете нужным справиться с ошибочными ситуациями и другими. Я также внедрил здесь экземпляр HttpServletRequest, потому что почти всегда вам потребуется это для чтения ваших параметров или атрибутов. Теперь, когда у вас есть свой класс действий, давайте посмотрим, как мы можем отобразить наш web.xml и настроить распорки 2.

 

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

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>




<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>
com.test..myexample
</param-value>
</init-param>
</filter>



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

<servlet>
<servlet-name>mytest</servlet-name>
<jsp-file>/WEB-INF/jsp/test/test.html</jsp-file>
</servlet>

<servlet-mapping>
<servlet-name>mytest</servlet-name>
<url-pattern>/public/showTest</url-pattern>
</servlet-mapping>

</web-app>

Здесь есть несколько вещей, на которые стоит обратить внимание. Во-первых, мы определили фильтр с именем struts 2. В нем мы указали атрибут actionPackages. Это место, где мы определяем имя пакета, в котором находятся наши классы действий. Если у вас много пакетов, вы можете указать имена пакетов через запятую, указанные в атрибуте param-value.

Далее мы указали атрибут отображения фильтра. Это говорит о том, что все URL, заканчивающиеся на .action, должны проходить через org.apache.struts2.dispatcher.FilterDispatcher, который, в свою очередь, будет искать во всех определенных пакетах, чтобы увидеть, какое действие должно быть вызвано. Надеюсь, это понятно вам, ребята. Все остальное — обычное отображение сервлетов, с которым все вы должны быть знакомы.

Теперь я покажу вам index.html, который просто выполняет редирект, вызывая наш класс действия, который, в свою очередь, отображает наш test.html в соответствии с именем отображения успеха, определенным в классе действия.

 

<html>
<head>My Home Page</head>
<body>


<script type="text/javascript">
location.replace('showTest.action');
</script>
</body>
</html>

Здесь мы говорим, чтобы перенаправить на showTest.action. Обратите внимание, что вашим действием было ShowTestAction. Но когда вы его называете, вы всегда должны убедиться, что имя начинается с простой буквы и заканчивается на .action, иначе оно не будет распознано диспетчером фильтров Struts.

Вот об этом, ребята. Я не дал реализацию test.html, потому что это может быть что угодно. Пожалуйста, не стесняйтесь оставлять комментарии, если у вас есть какие-либо сомнения или разъяснения относительно предоставленного учебника. mvn, чистая установка и ваш хороший идти с распорками 2 с аннотациями ?

Ура ребята

С http://dinukaroshan.blogspot.com/2011/05/struts-2-and-annotations.html