Struts注解

合集下载

注解 baseaction

注解 baseaction

注解 baseaction
BaseAction是一个抽象类,是Struts2中所有Action的基类,其主要作用是提供一些公共的属性和方法,方便Action的编写和使用。

具体来说,它包含以下几个方面:
1.继承ActionSupport类,从而可以直接使用ActionSupport中的所有属性和方法。

2.提供一个HttpServletRequest类型的request变量和一个HttpServletResponse类型的response变量,方便在Action中获取和设置请求和响应的相关信息。

3.提供一个ServletContext类型的servletContext变量,用于获取全局的Servlet上下文。

4.提供一个execute方法,作为Action的主要入口,执行Action 的核心逻辑。

5.提供一个setMessage方法,用于设置Action执行结果的信息。

通过继承BaseAction类,可以更加方便地编写和管理Action,并且可以实现一些公共的功能,如权限验证、日志记录等。

- 1 -。

struts2中使用注解配置Action方法详解

struts2中使用注解配置Action方法详解

struts2中使⽤注解配置Action⽅法详解使⽤注解来配置Action可以实现零配置,零配置将从基于纯XML的配置转化为基于注解的配置。

使⽤注解,可以在⼤多数情况下避免使⽤struts.xml⽂件来进⾏配置。

struts2框架提供了四个与Action相关的注解类型,分别为ParentPackage、Namespace、Result和Action。

ParentPackage:ParentPackage注解⽤于指定Action所在的包要继承的⽗包。

该注解只有⼀个value参数。

⽤于指定要继承的⽗包。

⽰例:使⽤ParentPackage注解,其value值为mypackage,表⽰所在的Action需要继承mypackage包,@ParentPackage(value="mypackage")public class UserAction extends ActionSupport{}如果注解中只有⼀个value参数值,或者其他参数值都使⽤默认值时,则可以对value参数设置进⾏简写,⽐如上述的代码:@ParentPackage("mypackage")public class UserAction extends ActionSupport{}把struts2-convention-pligin-2.x.x.jar包导⼊到web应⽤中,才能在Action类中使⽤注解。

Namespace:Namespace注解⽤于指定Action所在的包的命名空间。

该注解只有⼀个value参数,⽤于指定ACtion所属于的命名空间。

当使⽤Namespace注解时,在为命名空间取名需要使⽤斜杠(/)开头。

使⽤Namespace注解,指定其Action所在的包的命名空间为/user:@Namespace("/user")public class UserAction extends ActionSupport{}Result:Result注解⽤于定义⼀个Result映射,该注解包含四个参数,1)name:可选参数,⽤于指定Result的逻辑名,默认值为success2)location:必选参数,⽤于指定Result对应资源的URL3)type:可选参数,⽤于指定Result的类型,默认值为NullResult.class4)params:可选参数,⽤于为Result指定要传递的参数,格式为:{key1,value1,key2,value2,...}如果type参数的值为NullResult.class,那么struts2框架在解析Result配置时,会使⽤默认的结果类型(即ServletDispatcherResult)来替换NullResult。

struts2-convention-plugin_注解使用说明_概述及解释说明

struts2-convention-plugin_注解使用说明_概述及解释说明

struts2-convention-plugin 注解使用说明概述及解释说明1. 引言1.1 概述在现代的Web开发中,Struts2作为一个成熟稳定的Java Web框架,在业界得到广泛应用和认可。

而struts2-convention-plugin则是Struts2框架中一个重要的插件,它通过引入注解的方式来简化配置文件,并提供了一种更便捷、高效的开发方式。

1.2 文章结构本文将详细介绍struts2-convention-plugin的注解使用说明,并以概述、注解说明、使用示例等部分来逐步讲解。

接着,我们将对其进行解释说明,包括与传统struts.xml配置方式的比较、使用时需要注意的事项以及实际应用案例。

最后,我们将总结文章要点并给出对于注解方式的评价和展望。

1.3 目的本文旨在帮助读者更好地理解和掌握struts2-convention-plugin插件中注解的使用方法。

通过本文介绍和示例演示,读者将能够快速上手并灵活运用该插件,从而提高开发效率和代码质量。

以上是“1. 引言”部分内容,请根据需要进行修改和补充。

2. struts2-convention-plugin 注解使用说明:2.1 概述:struts2-convention-plugin 是Struts2 框架中的一个插件,它提供了一种基于注解的方式来配置和管理Action 类。

通过使用这个插件,我们可以简化传统的XML 配置文件,并且能够更加便捷地进行开发。

2.2 注解说明:struts2-convention-plugin 提供了一系列的注解,用于配置和定义Action 类及其相关属性和方法。

以下是常用的几个注解:- @Action:用于标识一个方法作为Action 的入口方法,可以指定URL 映射及HTTP 请求类型。

- @Result:用于指定一个结果视图,可以定义对应的视图页面、重定向操作等。

- @Param:用于将请求参数绑定到Action 类的属性上。

struts标签说明

struts标签说明

常用Struts标签的使用说明Struts Html标签库1,<html:form>:生成HTML<form>元素,action属性用来指定用户提交表单后,处理用户请求的组建。

Struts 框架将参照struts配置文件来查找相应的action组建。

在struts-config.xml 文件中1,<html:form action=”user.do”> 与user.do对应得代码是:<action parameter="method" name="userForm" path="/user" scope="request" validate="false">2,<html:text/>:生成HTML<input type=”text”>标签的property属性指定字段的名字,对应ActionForm bean中的一个属性,代码如下:<html:text property=”loginName”/> 的对应的userForm bean属性private String login_Name;public String getLogin_Name() {return login_Name;}public void setLogin_Name(String login_Name) {this.login_Name = login_Name;}3,<html:radio/>:生成HTML<input type=”radio”>标签,使用方法与<html:text>相同。

<html:radio property=”isActive” value=”1”>启用</html:radio><html:radio property=”isActive” value=”0”>停用</html:radio>4,<html:select/>:生成HTML<select>标签。

Maven搭建MyEclipse10+Struts2.1+Spring3.3+Hibernate3.3全注解框架

Maven搭建MyEclipse10+Struts2.1+Spring3.3+Hibernate3.3全注解框架

一、新建项目1.新建maven项目New ->project选择Maven projectnext在filter输入webapp选择maven-archetype-webappGroup id输入inscribe,artifact id输入farsighted二、添加struts2框架1.添加struts2支持项目上点右键->myeclipse->add struts capabilities点选struts2.1和/*只勾选struts2 core lib启动tomcat,在地址栏输入localhost:8088/farsighted出现如下界面2.添加action类New ->source folder输入src/main/javaNew ->classPackage输入org.inscribe.farsighted.action,name输入LoginActionLoginAction.javapackage org.inscribe.farsighted.action;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result;import com.opensymphony.xwork2.ActionSupport;/*** @author steve frank**/@ParentPackage("struts-default")public class LoginAction extends ActionSupport {private String name;private String password;public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Action(value = "login", results = {@Result(name = INPUT, location = "/WEB-INF/content/fail.jsp"),@Result(name = SUCCESS, location = "/WEB-INF/content/success.jsp") }) public String execute() {if (name.equals("steve") && password.equals("123"))return SUCCESS;elsereturn INPUT;}}Index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title></head><body><s:form action="login"><s:textfield name="name" value="steve"></s:textfield><s:textfield name="password" value="123"></s:textfield><s:submit></s:submit></s:form></body></html>success.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'success.jsp' starting page</title></head><body><s:text name="password" /><hr /><s:property value="password" /></body></html>fail.jsp<body>登录失败,用户名或密码错误.</body>三、添加hibernate框架1.添加hibernate支持右键->myeclipse->add hibernate capabilities点选hibernate 3.3 勾选enable hibernate annotations support勾选hibernate 3.3 annotations&entity manager,hibernate 3.3 core lib,hibernate 3.3 advanced support lib点选copy checked library jars to folder and add to build-path点选newFolder :src/main/resources勾选open configuration file选择db driver:mysql去掉勾,不创建hibernatesessionfactory四、添加spring框架1.添加spring支持项目右键->myeclipse->add spring capabilities点选spring3.0勾选spring 3.0 core;spring 3.0 aop;spring3.0 persistence core; spring3.0 persistence jdbc; 勾选copy checked library contents to project folder采取默认,enable aop,new applicationcontext.xml不创建sessionfactory2.applicationContext.xml文件配置<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd"> <bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBea n"><property name="configLocation" value="classpath:hibernate.cfg.xml"></property><property name="packagesToScan" value="org.inscribe.farsighted.model" /> </bean><!-- 使用annotation 自动注册bean,并检查@Controller, @Service, @Repository注解已被注入--><context:component-scan base-package="org.inscribe.farsighted" /><!-- 配置事务管理--><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 配置注解实现管理事务(cglib:proxy-target-class="true")--><tx:annotation-driven transaction-manager="transactionManager"proxy-target-class="true" /></beans>3.hibernate.cfg.xml修改<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="connection.url">jdbc:mysql://localhost:3306/test</property><property name="ername">root</property><property name="connection.password">admin</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="myeclipse.connection.profile">MYSQL</property><!-- <mapping class="org.inscribe.farsighted.model.Student" /> --><!-- Connection Pooling Info --><property name="initialSize">5</property><property name="maxActive">100</property><property name="maxIdle">30</property><property name="maxWait">500</property><property name="defaultAutoCommit">false</property></session-factory></hibernate-configuration>4.web.xml文件配置<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class ></listener><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><filter><filter-name>Set Character Encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>Set Character Encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>五、类的添加1.hibernate反向生成students表右键->hibernate reverse engineering选择package : com.inscribe.farsighted.model勾选create pojo<>db->点选add hibernate mapping annotations to pojo;勾选update hibernate configuration with mapping resource location勾选java data access object(dao)->勾选generate precise findby methods;点选sping daoId generation :native2.添加service接口package org.inscribe.farsighted.service;import org.inscribe.farsighted.model.Student;public interface StudentService {public Student findById(Integer id);}3.添加service实现类package org.inscribe.farsighted.service.impl;import javax.annotation.Resource;import org.inscribe.farsighted.model.Student;import org.inscribe.farsighted.model.StudentDAO;import org.inscribe.farsighted.service.StudentService;import org.springframework.stereotype.Service;@Servicepublic class StudentServiceImpl implements StudentService {@Resourceprivate StudentDAO studentDAO;@Overridepublic Student findById(Integer id) {// TODO Auto-generated method stubreturn studentDAO.findById(id);}}4.添加测试类package org.inscribe.farsighted;import org.inscribe.farsighted.model.Student;import org.inscribe.farsighted.service.StudentService;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");StudentService service = (StudentService) context.getBean("studentServiceImpl");Student s=service.findById(1);System.out.println(s.getName());}}5.WEB-INF下新建Folder包结构如下6.修改输出目录Build path->configure build pathOut folder统一改default:Webapp/src/main/webapp/WEB-INF/classes更改如果无效,在pom.xml中<build>……</build>添加<sourceDirectory>src/main/java</sourceDirectory><resources><resource><directory>src/main/resources</directory></resource></resources><outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>7.添加struts-spring支持(action注解配置支持)Build path->add librariesMyeclipse libraries勾选struts 2 spring libraries8.修改struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration2.1//EN" "/dtds/struts-2.1.dtd"><struts><!-- 开启使用开发模式,详细错误提示--><constant name="struts.devMode" value="true" /><!-- 将对象交给spring管理--><constant name="struts.objectFactory" value="spring" /><!-- 指定资源编码类型--><constant name="struts.i18n.encoding" value="UTF-8" /><!-- 指定每次请求到达,重新加载资源文件--><constant name="struts.i18n.reload" value="true" /><!-- 指定每次配置文件更改后,自动重新加载--><constant name="struts.configuration.xml.reload" value="false" /><!-- 国际化资源文件--><constant name="struts.custom.i18n.resources" value="content/Language" /><!-- 浏览器缓存--><constant name="struts.serve.static.browserCache" value="false" /><!-- 默认后缀名--><constant name="struts.action.extension" value="do,action,jhtml,," /><!-- Struts Annotation --><constant name="actionPackages" value="com.frank.action" /> </struts>9.在LoginAction.java中添加调用StudentService@Resourceprivate StudentService studentService;测试Student s = studentService.findById(1);System.out.println(s.getName());10.success.jsp中添加<hr /> ${password}11.启动tomcat,地址栏输入http://localhost:8088/farsighted/点击submit效果如下包结构如下12.测试完成.。

Spring注解@component、@service、@Autowired等作用与区别

Spring注解@component、@service、@Autowired等作用与区别

Spring注解@component、@service、@Autowired等作⽤与区别1、@Service⽤于标注业务层组件2、@Controller⽤于标注控制层组件(如struts中的action)3、@Repository⽤于标注数据访问组件,即DAO组件.4、@Component泛指组件,当组件不好归类的时候,我们可以使⽤这个注解进⾏标注。

5、@Autowired与@Resource的区别: @Autowired由Spring提供,只按照byType注⼊,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。

如果想使⽤名称装配可以结合@Qualifier注解进⾏使⽤。

public class UserService {@Autowired@Qualifier(name="userDao1")private UserDao userDao;} @Resource由J2EE提供,默认按照byName⾃动注⼊,Spring将@Resource注解的name属性解析为bean的名字,type属性则解析为bean的类型。

所以如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性则使⽤byType⾃动注⼊策略。

①如果同时指定了name和type,则从Spring上下⽂中找到唯⼀匹配的bean进⾏装配,找不到则抛出异常。

②如果指定了name,则从上下⽂中查找名称(id)匹配的bean进⾏装配,找不到则抛出异常。

③如果指定了type,则从上下⽂中找到类似匹配的唯⼀bean进⾏装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,⼜没有指定type,则⾃动按照byName⽅式进⾏装配;如果没有匹配,则回退为⼀个原始类型进⾏匹配,如果匹配则⾃动装配。

总结:@Resource的作⽤相当于@Autowired,只不过@Autowired按byType⾃动注⼊。

Struts2的配置文件详解

Struts2的配置文件详解
Struts2的命名空间的作用等同于struts1里模块的作用。
1.3.包含配置:
在Struts2中可以将一个配置文件分解成多个配置文件,那么我们必须在struts.xml中包含其他配置文件。
<struts>
<includefile="struts-default.xml"/>
<includefile="struts-user.xml"/>
erName= userName;
}
/**
*@returnthepassword
*/
publicString getPassword() {
returnpassword;
}
/**
*@parampasswordthepasswordtoset
*/
publicvoidsetPassword(String password) {
</action>
</package>
</struts>
如上示例的配置,配置了一个名为default的包,该包下定义了一个Action。
1.2.命名空间配置:
考虑到同一个Web应用中需要同名的Action,Struts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action。
Struts2通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。
l public Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例。
l public void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名-属性值对。

Struts+Spring+Hibernate整合入门详解

Struts+Spring+Hibernate整合入门详解

3、运行eclipse,选择一个空目录作为工作区(工程结构如下:其中我们要写的Java代码在Java Resource: src(以后直接称src)下,网站根目录内容在WebContent下,类所在根目录是WEB-INF/classes,Eclipse 会自动将build/classes里面已经编译的类同步过去。

向WEB-INF下的lib目录添加如下所列的jar包。

(1)这些包在下载解压后Spring,Struts,Hibernate的lib目录或者dist/module目录下面(如果不在,可以到网上google一把。

列表中mysql-*.jar包是MySQL数据库的JDBC Driver)。

也可以把所有lib和dist 下的jar包拷贝过来(可以在系统复制这些jar包,然后到Eclipse里面选中WEB-INF里面的lib包,然后粘帖就可以了)。

但要注意全拷贝可能会存在冲突,如struts*plugin.jar等包不能引入,否则不能运行。

(2)这些Jar包是:antlr-2.7.2.jarcglib-nodep-2.1_3.jarcommons-beanutils-1.6.jarcommons-chain-1.1.jarcommons-collections-2.1.1.jarcommons-dbcp.jarcommons-digester.jarcommons-logging-1.0.4.jarcommons-logging-api-1.1.jarcommons-pool.jarcommons-validator-1.3.0.jardom4j-1.6.1.jarel-api.jarel-ri.jarfreemarker-2.3.8.jarhibernate3.jarjsf-api.jarjta.jarmysql-connector-java-3.0.14-production-bin.jarognl-2.6.11.jaroro-2.0.8.jarspring-hibernate3.jarspring.jarstruts-config.xmlstruts-core-1.3.5.jarstruts2-codebehind-plugin-2.0.9.jarstruts2-config-browser-plugin-2.0.9.jarstruts2-core-2.0.9.jarstruts2-jasperreports-plugin-2.0.9.jarstruts2-jfreechart-plugin-2.0.9.jarstruts2-jsf-plugin-2.0.9.jarstruts2-pell-multipart-plugin-2.0.9.jarstruts2-plexus-plugin-2.0.9.jarstruts2-sitegraph-plugin-2.0.9.jarstruts2-sitemesh-plugin-2.0.9.jarstruts2-spring-plugin-2.0.9.jarstruts2-struts1-plugin-2.0.9.jarstruts2-tiles-plugin-2.0.9.jartiles-api-2.0.4.jartiles-core-2.0.4.jartiles-jsp-2.0.4.jarindex.jsp的内容如表,我们暂时不分析。

列举5个三大框架中用到的注解及其作用

列举5个三大框架中用到的注解及其作用

列举5个三大框架中用到的注解及其作用在现代化的Java编程中,常常使用三大框架,分别是Spring、Hibernate和Struts。

这些框架目的在于开发高质量和不易出错的应用程序。

而注解就是这些框架之一,其中包括许多重要的注解。

本文将会列举5个三大框架中用到的注解及其作用。

一、@Autowired@Autowired是Spring框架中用到的一个注解,它作用是自动装配。

被它所标注的类,Spring会自动在容器中查找匹配类型的对象,并且自动注入到这个类的Field中(即根据类型注入)。

如果这样的对象有多个的话,就会根据name属性来进行匹配。

@Autowired注解的作用类似于XML配置文件中的<bean/>元素配置中的<property/>元素。

使用这个注解可以省略掉XML中对象关系的配置,更加方便。

二、@Entity@Entity注解是Hibernate框架中用到的一个注解,它作用是实体映射,这个注解往往和@Table注解一起使用。

这个注解用于指定一个作为Hibernate映射的持久化实体类型。

通过这个注解统计内部信息后可以将它们映射到数据库中的表结构。

三、@RequestMapping一个控制器有很多的方法,而且这些方法应该是有不同的请求方式的(GET、POST等),在Struts框架中需要使用根据方法名来判定请求方式,而在Spring MVC中使用的则是@RequestMapping注解。

这个注解作用是将一个HTTP请求映射到一个特定的处理方法上(即根据请求路径匹配)。

这个注解同样有很多的属性可以配置,如路径、请求方式等。

四、@Transactional像封装JDBC的框架,往往需要处理事务。

用常规的JDBC我们可以这样做,但是Spring提供了更加便利和灵活的机制。

@Transactional注解用于事务处理。

当我们在Java方法上使用这个注解时,就会自动拦截这个方法,然后在@Transactional注解中对事务进行了定义。

Struts2知识点详解

Struts2知识点详解

Struts 2的基本流程Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。

在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。

2.核心控制器:FilterDispatcherFilterDispatcher是Struts 2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。

如果用户请求以action结尾,该请求将被转入Struts 2框架处理。

Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts 2调用名为login的Action来处理该请求。

Struts 2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action时,定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户请求,而class属性决定了该Action的实现类。

Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。

而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。

显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。

图3.19显示了这种处理模型。

图3.19 Struts 2的拦截器和Action从图3.19中可以看出,用户实现的Action类仅仅是Struts 2的Action代理的代理目标。

Struts2.1.6+ Prepable 预处理拦截器

Struts2.1.6+ Prepable 预处理拦截器

Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)这是本系列的最后一章,大象对示例进行适当的扩充并说明。

其实到第四篇,对于示例的说明就已经全部讲完了,如果按照这样的例子,很难有什么值得学习的地方。

大象本着写点有用东西的原则,在这章,对示例进行一下适当的扩充并说明。

第五部分:扩展框架paramsPrepareParamsStack拦截器栈paramsPrepareParamsStack这个拦截器栈是在struts2-default.xml中定义的,里面包含了很多个拦截器,最重要的是这三个:params、prepare、modelDriven。

我们只要记住这样几点。

params:它负责将请求参数值设置到Action中与之同名的属性中。

prepare:当Action实现了Preparable接口时,这个拦截器就会调用prepare()方法。

如果你有想在execute()方法之前执行的逻辑处理,它就可以帮你完成这个功能。

modelDriven:如果Action实现了ModelDriven接口,这个拦截器就会把getModel()方法中的返回结果压入值栈。

这就意味着,可以在结果页面上直接使用model对象的属性。

它的执行顺序是这样的首先,params拦截器会给action中的相关参数赋值,如id,username,password等等。

然后,prepare拦截器执行prepare()方法,prepare()会根据参数,如id,去调用相关的方法,设置model对象。

当然,实现的这个接口方法由你自己来定义,不局限只设置model之类的功能。

接着,modelDriven拦截器会将model对象压入值栈,因为它是把getModel()方法中的返回结果放到值栈中,而这个方法的返回类型是个泛型参数,在实现ModelDriven接口的时候,可以给它指定一个具体的对象类型,因此返回类型也将是这个指定的对象类型,如ModelDriven<User>最后,params拦截器会将参数再赋值给model对象。

struts serverendpoint注解用法 概述及解释说明

struts serverendpoint注解用法 概述及解释说明

struts serverendpoint注解用法概述及解释说明1. 引言1.1 概述在现代的Web开发中,前后端分离已经成为一种普遍的趋势。

而服务器端的推送也日益被广泛应用于各种场景,例如实时聊天、实时数据更新等。

为了能够更加方便地进行服务器端推送和前后端交互,Struts框架引入了ServerEndpoint 注解。

1.2 文章结构本文将详细介绍Struts框架中ServerEndpoint注解的用法及其相关内容。

文章主要分为四个部分组成:引言、struts serverendpoint注解用法、解释说明和结论。

通过对ServerEndpoint注解的概述、使用方法以及参数说明,希望读者能够全面了解该注解,并在实际项目中运用得当。

1.3 目的本文旨在向读者提供关于Struts框架中ServerEndpoint注解使用方法和相关细节的全面指南。

通过阅读本文,读者可以清晰地了解如何正确使用该注解来实现服务器端推送功能,并且掌握注意事项以避免一些常见错误。

同时,我们还将对ServerEndpoint注解的作用进行详细说明,并给出示例以帮助读者更好地理解。

最后,在结论部分,我们将总结概述该注解的优势与不足,并展望其未来的发展方向。

以上是文章“1. 引言”部分的详细内容描述。

请根据需要进行修改和补充,确保文章的准确性和连贯性。

2. struts serverendpoint注解用法:2.1 注解简介:在Struts框架中,serverendpoint注解是一个非常重要的注解之一。

该注解用于标记一个类或接口作为WebSocket服务器端点。

它告诉框架该类是一个WebSocket端点,需要处理来自客户端的WebSocket连接和消息。

2.2 使用方法:要使用serverendpoint注解,首先需要确保你的项目包含了Struts框架的相关依赖。

然后,在你希望添加WebSocket功能的类或接口上添加@ServerEndpoint注解。

Struts中文帮助文档详解

Struts中文帮助文档详解

3 S TRUTS 详解 (1)3.1.1 传统的Model 1和Model 2.......2 3.1.2 MVC 及其优势.. (3)3.2 S TRUTS 概述 (4)3.2.1 Struts 的起源.............................4 3.2.2 Struts 的体系结构 (4)3.3 S TRUTS 的下载和安装..............................5 3.4 S TRUTS 入门. (6)3.4.1 基本的MVC 示例......................6 3.4.2 Struts 的基本示例...................13 3.4.3 Struts 的流程 (16)3.5 S TRUTS 的配置 (17)3.5.1 配置ActionServlet ...................17 3.5.2 配置ActionForm .....................19 3.5.3 配置Action ..............................20 3.5.4 配置Forward .. (21)3.6 S TRUTS 程序的国际化 (22)3.6.1 Java 程序的国际化.................23 3.6.2 Struts 的国际化.. (26)3.7 使用动态A CTION F ORM (30)3.7.1 配置动态ActionForm .............30 3.7.2 使用动态ActionForm . (31)3.8 S TRUTS 的标签库 (32)3.8.1 使用Struts 标签的基本配置....32 3.8.2 使用html 标签库......................33 3.8.3 使用bean 标签库.....................35 3.8.4 使用logic 标签库..................42 3.9 S TRUTS 的数据校验 (53)3.9.1 ActionForm 的代码校验.........54 3.9.2 Action 的代码校验...................57 3.9.3 结合commons-validator.jar 的校验 (58)3.10 S TRUTS 的异常框架...............................66 3.11 几种常用的A CTION (69)3.11.1 DispatchAction 及其子类......70 3.11.2 使用ForwardAction ..............74 3.11.3 使用IncludeAction ................74 3.11.4 使用SwitchAction (75)3.12 S TRUTS 的常见扩展方法 (76)3.12.1 实现PlugIn 接口....................76 3.12.2 继承RequestProcessor ..........77 3.12.3 继承ActionServlet .. (79)本章小结 (80)3 Struts 详解从实际应用开发的角度而言,Struts 应该是MVC 框架的第一选择。

开源框架之struts2笔记归纳

开源框架之struts2笔记归纳

Struts部分: (1)1)为什么要学习Struts框架 (2)2)为什么使用MVC? (2)3)MVC在JavaWeb中的实现 (2)*4) Struts2的主要工作流程 (2)3.Struts2框架的历史 (4)*4.Struts2框架基本使用 (4)1.Struts2使用基本规则 (5)Struts2标签+OGNL表达式 (6)2)OGNL工作原理 (6)4.OGNL在Struts2中的应用 (8)1)xwork对ognl进行扩展和改造 (8)*2)ValueStack对象(参考valuestack.jpg) (9)*3)在JSP中访问ValueStack数据方法 (9)a.使用Struts标签+OGNL表达式 (9)b.使用EL表达式 (9)1.Struts2框架Action组件的核心应用 (10)1)Action组件基本原理 (10)*3)Action属性注入 (11)*4)如何利用一个Action处理多个请求 (11)1.前期课程回顾 (11)1.Result组件原理 (12)1)Result组件的作用 (12)2)Result组件实现规则 (12)*2.常用的几种Result组件 (13)2)Action响应 (13)1.Struts2标签 (14)1)通用标签 (14)2)表单标签 (15)2.拦截器组件 (15)*2)掌握自定义拦截器的使用 (16)Struts部分:======================Day01=========================1)为什么要学习Struts框架Struts框架是MVC设计模式的实现,基于Struts开发可以简化开发难度,提高开发效率。

2)为什么使用MVC?MVC是一个非常优秀的设计思想,基于该思想架构程序,可以提高程序的结构灵活性,便于日后维护、扩展和升级。

3)MVC在JavaWeb中的实现Servlet,JSP,Filter,JDBCa.原ShoppingCart程序就是一个MVC结构实现View实现部分:采用JSP组件实现Model实现部分:采用DAO、Entity等组件实现Controller实现部分:采用ActionServlet组件实现b.ShoppingCart程序虽然基于MVC,但结构还有一些问题:当请求数量比较多时,需要在Servlet中编写大量的if...else分支语句,而且Servlet代码量非常多。

struts2注解方式的验证

struts2注解方式的验证

struts2注解⽅式的验证struts2的验证分为分编程式验证、声明式验证、注解式验证。

因现在的⼈越来越懒,都追求零配置,所以本⽂介绍下注解式验证。

⼀.hello world参考javaeye的这篇⽂章,按着做⼀次,起码有个初步印象Validation使⽤名字叫做validator的Intercepter,在默认情况下,struts2已经定义了这个Intercepter,我们在不加声明的情况下就可以使⽤Validation了如果是使⽤默认的拦截器,就已经开启了验证框架的了,直接⽤。

开启验证的⽅式是(官⽹):打开验证默认拦截器堆栈“defaultStack”已经打开验证。

在创建⾃⼰的拦截器堆栈⼀定要包括两对validation和workflow拦截器。

来⾃struts-default.xml:<interceptor-stack name="defaultStack">...<interceptor-ref name="validation"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref><interceptor-ref name="workflow"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref></interceptor-stack>从版本2.0.4开始,Struts为XWork的com.opensymphony.xwork2.validator.ValidationInterceptor拦截器提供了扩展。

struts2标签详解

struts2标签详解

Struts2 标签详解详细的说明了struts2所有标签由整理版权属 以及原作者。

由于标签太多难做目录索引,如果你觉得有目录索引更好,请到/p/myjdemo/downloads/list 下载CHM版本的Struts2标签详解,谢谢。

aa标签创建一个HTML超链接,等价于HTML 的<a href=""....示范代码:<s:a href="login.action">登陆</s:a>action使用action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。

如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。

action标签的属性:id:可选属性,该属性将会作为该Action的引用IDname:必填属性,指定该标签调用哪个Actionnamespace:可选,指定该标签调用的Action所在的namespace. executeResult:可选,指定是否要将Action的处理结果页面包含到本页面。

默认是false,即不包含ignoreContextParams:可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。

下面是本示例应用中的Action类,包含连个处理逻辑。

代码如下public class TagAction extednds ActionSupport{//封装用户请求参数的author属性private String author;//author的get和set的方法,省略……public String execute() throws Exception{return "done";}public String login() throws Exception{ServletActionContext.getRequest().setAttribute("author",getAuthor()); return "done";}}上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。

struts2常用标签详解

struts2常用标签详解

struts2标签详解A:<s:a xhref=""></s:a>-----超链接,类似于html里的<a></a><s:action name=""></s:action>-----执行一个view里面的一个action<s:actionerror/>-----如果action的errors有值那么显示出来<s:actionmessage/>-----如果action的message有值那么显示出来<s:append></s:append>-----添加一个值到list,类似于list.add();<s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,这个是ajaxB:<s:bean name=""></s:bean>-----类似于struts1.x中的,JavaBean的值C:<s:checkbox></s:checkbox>-----复选框<s:checkboxlist list=""></s:checkboxlist>-----多选框<s:combobox list=""></s:combobox>-----下拉框<s:component></s:component>-----图像符号D:<s:date/>-----获取日期格式<s:datetimepicker></s:datetimepicker>-----日期输入框<s:debug></s:debug>-----显示错误信息<s:div></s:div>-----表示一个块,类似于html的<div></div><s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----双下拉框E:<s:if test="#name=‟hujianqiang‟">asdfasdf</s:if><s:elseif test=""></s:elseif><s:else></s:else>-----这3个标签一起使用,表示条件判断F:<s:fielderror></s:fielderror>-----显示文件错误信息<s:file></s:file>-----文件上传<s:form action=""></s:form>-----获取相应form的值G:<s:generator separator="" val=""></s:generator>----和<s:iterator>标签一起使用H:<s:head/>-----在<head></head>里使用,表示头文件结束<s:hidden></s:hidden>-----隐藏值I:<s:i18n name=""></s:i18n>-----加载资源包到值堆栈<s:include value=""></s:include>-----包含一个输出,servlet或jsp页面<s:inputtransferselect list=""></s:inputtransferselect>-----获取form的一个输入<s:iterator></s:iterator>-----用于遍历集合L:<s:label></s:label>-----只读的标签M:<s:merge></s:merge>-----合并遍历集合出来的值O:<s:optgroup></s:optgroup>-----获取标签组<s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右选择框P:<s:param></s:param>-----为其他标签提供参数<s:password></s:password>-----密码输入框<s:property/>-----得到'value'的属性<s:push value=""></s:push>-----value的值push到栈中,从而使property标签的能够获取value的属性R:<s:radio list=""></s:radio>-----单选按钮<s:reset></s:reset>-----重置按钮S:<s:select list=""></s:select>-----单选框<s:set name=""></s:set>-----赋予变量一个特定范围内的值<s:sort comparator=""></s:sort>-----通过属性给list分类<s:submit></s:submit>-----提交按钮<s:subset></s:subset>-----为遍历集合输出子集T:<s:tabbedPanel id=""></s:tabbedPanel>-----表格框<s:table></s:table>-----表格<s:text name=""></s:text>-----I18n文本信息<s:textarea></s:textarea>-----文本域输入框<s:textfield></s:textfield>-----文本输入框<s:token></s:token>-----拦截器<s:tree></s:tree>-----树<s:treenode label=""></s:treenode>-----树的结构U:<s:updownselect list=""></s:updownselect>-----多选择框<s:url></s:url>-----创建urlStruts2常用的Ajax标签Struts2为了简化Ajax过程,提供了一些常用的Ajax标签,对于一些更复杂的Ajax通信过程,我们可以使用JSON插件来实现。

总结的一些常用计算机英文以及注解

总结的一些常用计算机英文以及注解

英文Variable可变的,变量token 令牌prefix 前缀suffix 后缀release 释放core 核心,中心action 动作,活动annotation 注释,注解expect 期望,role 角色popedom 权限composite 联合composite-id联合主键available 有效,可用synchronize 使同步encountered 遭遇了,遇到了module 模块associated 联系关联installation 安装condition 条件collection 收集,汇集,menu 菜单目录execute 执行detected 检测到unhandled 无法处理target 目标,规定。

常见于web 做标签param 参数dispatcher 调度,分配layout 布局Thread 线程global 全局redirect 重定向dispatcher 调度,常用于转发废convention 约定注解开发插件~ validators 校验xml校验时用的属性标签parse 分析注解相关:@Override: 限定重写父类方法, 该注解只能用于方法// 对父类方法重写,在编译时进行代码检查,如果不构成方法覆盖,产生编译错误// JDK5 只能用于方法覆盖// JDK6 可以用于方法实现@Retention 保留,修饰注解有效范围RetentionPolicy.SOURCE::在.java文件中有效,给编译器使用RetentionPolicy.CLASS :在.class文件中有效,给类加载器RetentionPolicy.RUNTIME:给运行程序使用(我们常用该类型)@Target:目标,靶子表示注解可以应用目标(一般是在方法上使用注解)@Deprecated (反对,不赞成) 表示方法过时@SuppressWarnings: :在编译时,不出现警告@interface 类似接口,注解定义使用关键字属性定义格式:属性类型属性名() default 默认值@Documented:备注文件注解信息会被生成到文档(了解)@Inherited:应用被@Inherited修饰注解的类的子类会自动继承注解ps:注解内定义的数据类型都是方法。

shiro的注解

shiro的注解

shiro的注解
Shiro的注解是指在使用Shiro框架时,可以使用一些注解来简化代码的编写和配置。

Shiro提供了以下常用的注解:
1. @RequiresAuthentication:标注在方法或类上,表示当前用户需要进行身份认证才能访问该方法或类。

2. @RequiresUser:标注在方法或类上,表示当前用户必须是已经进行过身份认证或者记住我登录的用户才能访问该方法或类。

3. @RequiresGuest:标注在方法或类上,表示当前用户必须是一个“guest”用户,即未进行身份认证或者记住我登录的用户才能访问该方法或类。

4. @RequiresRoles(value = {"role1", "role2"}):标注在方法或类上,表示当前用户必须具有指定的角色才能访问该方法或类。

5. @RequiresPermissions(value = {"permission1", "permission2"}):标注在方法或类上,表示当前用户必须具有指定的权限才能访问该方法或类。

使用这些注解可以在方法或类级别上定义访问控制规则,从而简化了在代码中手动编写权限验证的逻辑。

同时,这些注解也可以与AOP结合使用,以更灵活地定义访问控制规则。

1/ 1。

Struct2的result的返回类型

Struct2的result的返回类型
org.apache.struts2.dispatcher.ServletActionRedirectResult
PlainTextResult
返回普通文本 类容
Json
注解@ParentPackage("json-default")
返回 JSON 格式的 数据
用法实例
一、dispatcher
(1)为缺省的 result 类型,一般情况下我们在 struts .xml 会这么写:
<result name="success">/main.js p</result>
类型大全
Struts2 框架提供的结果类型
已配置结果类型 类名

描述
dispatcher
org.apache.struts2.dispatcher. ServletDispatcherResult
注解@ParentPackage("struts-default")
默认结果类型, 用来呈现 JSP 页 面
1.chain:用来处理 Action 链,被跳转的 action 中仍能获取上个页面的值,如 request 信息。 com.opensymphony.xwork2.ActionChainResult
2.dispatcher:用来转向页面,通常处理 JSP org.apache.struts2.dispatcher.ServletDispatcherResult
10.redirectAction :重定向到一个 Action ,跳转的页面中丢失传递的信息, 如 request org.apache.struts2.dispatcher.ServletActionRedirectResult
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

struts2-convention既然说了是全注解开发,而且我们已经实现了Hibernate与Spring的注解。

同样的,Struts2也能够做到用注解来代替配置文件,struts2-convention插件可以帮助我们完成这一功能。

它是struts2提供的一个插件,目前网上相关的中文文档主要是一个叫石太洋的人根据官方文档翻译的,很多网站与博客都有转载。

我看了原文与译文,感觉讲的不够清楚,例子也很简单。

大象根据自己在项目中的实际使用情况,现将个人对这个插件的经验总结写出来与各位分享,希望与大家多交流,共同提高。

官方文档请不要把地址中的两个大写W换成小写,否则是打不开页面滴!这个插件的使用其实非常简单,如果光看文档可能会觉得好像很麻烦。

那么大象来告诉你怎样快速学习这个插件。

首先你要搞清楚,这个插件它会默认扫描所有包名为struts、struts2、action、actions下面的类。

然后它会对实现了Action接口以及类名以Action 结尾的这些类,作为Action来进行处理。

你可以重新定义按哪种包名进行扫描。

比如本例设定,只扫描web包下面的所有类,因为我们将Action类都放在这个包下面。

那这个插件是怎么实现原来的配置信息的呢?它的映射规则是这样的,对于以Action结尾的的类,去掉Action,取剩下的部分,将所有的字母转换为小写,如果有驼峰式的写法,则用"-"连接符来连接不同的单词,这是此插件的默认方式。

最终转换之后的就是请求地址,还是用例子说明。

erAction按照上面的规则,请求地址就应该是UserAction去掉Action后缀,将其余部分转换为小写,所以user就是我们的请求地址。

不过,这还没有完,因为这里面还有一个命名空间的路径,在通常的配置文件中,一般会将不同的功能进行划分,在package标签里加上namespace属性。

使用这个插件,它会为你自动配上命名空间,默认的就是前面说到的以那四种名称为根目录的命名空间,它们之后的都将成为命名空间的名称。

erAction 映射为 /user.actionerAction 映射为 /base/user.action要是我们不以struts或其它几种默认值为包名,又该怎么办呢?没关系,插件为我们提供了一种自定义根包的配置方式<constant name="struts.convention.package.locators" value="web" />上面这段配置是写在struts.xml里面的,它指定web为根,作用就相当于那四种默认值。

erAction映射为 /base/user.actioncom.bolo.examples.web.HelloAction 映射为 /hello.actioncom.bolo.examples.web.HelloWorldAction 映射为 /hello-world.action请一定注意驼峰写法的映射方式,假如这里不是HelloWorld,而是Helloworld,那就不会再是hello-world.action,而是helloworld.action 了。

既然已经知道了它的映射方式,接下来再看看这个插件是如何定义结果页面的。

convention默认会到/WEB-INF/content文件夹下面查找对应的结果页面,这个文件夹的名字可以修改,需要在struts.xml中定义<constant name="struts.convention.result.path" value="/WEB-INF/jsp" />文件夹的名字改成了jsp,这样定义后,convention就会在这个文件夹下面查找结果页面。

它的查找路径与映射的命名空间有关。

默认规则是,在请求的命名空间下面,根据请求名称再结合方法返回的字符串生成最终的结果页面名称,再配以后缀名。

convention支持以jsp、ftl、vm、html、htm等五种后缀格式的文件。

这里有个比较特殊的是如果方法返回success,那么可以不用将它与请求名称拼接起来,直接使用请求名称作为返回页面的名称。

还是举例子说明。

比如上面这段代码,HelloAction处于我们定义的根包(web)下面,因此,它的action请求为hello.action。

这时,会默认执行execute()方法,由于返回的是success字符串,所以页面的名称可以简写为hello.jsp,但是当执行welcome方法时,由于返回的字符串为welcome,这时的页面名称则为hello-welcome.jsp。

convention就是遵循这样的规则来进行命名,当然这只是最基本的,我们再来看看稍微复杂点的东东。

这个RoleAction类的外部,加了两种注解,它们的作用相当于配置文件中的result标签。

Results是一个Result类型的数组注解,里面可以包含多个Result配置。

使用Result注解来设置返回类型与返回页面,是不准备采取默认的定义方式。

比如HelloAction就是我们采取的默认方式。

另外对于有些特殊的返回类型,也需要显式的进行定义。

因为我对RoleAction中的execute()方法返回结果进行了显式的定义,所以,它将不再返回默认的role.jsp,而是location指定的role-list.jsp,Result 注解中的name值要与返回值对应。

当请求路径为role!input.action时,会执行input()方法,对于这个方法来说,由于没有进行显式的定义,所以它会按照默认的命名规则返回role-input.jsp。

而redirectUser方法的返回结果指定了一个type为redirectAction的值,这表示要对Action重定向,在location中也说明了是跳转到哪个Action。

请注意这里指定的是user.action,当程序跳转到UserAction时,会默认执行execute方法。

假如说,你想执行其它方法该怎么办呢?可以在location里面这样定义,location="user!input.action"。

请记住,重定向时,如果是跳转到其它Action或本Action中的其它方法,type要写成redirectAction。

更进一步,我还想带些参数过去,又该如何呢?请添加params属性,它是一个数组类型。

可以这样定义,params={"role_id","${role_id}","role_name","超级管理员"}。

convention文档中有说明,里面的参数是一个键值对,总是形如key,value,key,value。

所以第一个role_id与第三个role_name都叫参数名,二和四则是参数值。

另外注意下"${role_id}"的含义,这是使用的OGNL表达式取出存在于值栈中的名叫role_id的值。

这是一种动态获取并赋值的方式,在采用配置文件的方式中,也可以这样运用,而role_name参数则是一个固定字符串值。

需要特别注意的就是,作为参数名的role_id与role_name,一定要在指向的Action中有这两个同名的属性,并且还有set方法,这是用来给这两个属性赋值。

而对于${role_id},则要在当前这个Action中,有它的get方法。

用于取值。

补充说明一下,在Action类中定义的全局变量,不是非得给它都加上set、get方法,这是根据实际情况来设置的。

简单的说get()是获得值,set()是设置值。

比如,你现在要在页面上显示username,那么就对这个属性设置get方法,如果只是对username设置值,从页面传值到Action,那只需要对它设置set方法就可以了。

除此之外,我们也可以不采用struts2提供的值栈方式得到参数值,而是使用非常熟悉的request. getParameter()方法来获取参数。

至于实际怎么使用,由各位自己决定,不知道我这样说,大家能不能明白?大象根据实际使用情况,发现动态参数的传递在struts2.1.6存在BUG,如果需要使用这个功能,请将struts2升级到2.1.8.1版。

大象根据实际应用,建议大家统一在类名上面定义Results设置,这样做有利于开发与维护;不建议单独对方法使用@Action注解来重新定义它的访问地址与返回结果,因为这样做有些破坏统一性,不过可以根据实际情况进行处理,但不要过多的使用。

struts.xml整个struts.xml的配置文件就这么多,当然你自己还可以扩展,因为采用了注解,所以以前的那些配置就再也看不到了。

在这个文件中,package是继承convention-default,而没有继承struts-default,为什么呢?查看convention的struts-plugin.xml文件,我们可以发现convention-default 继承了struts-default,所以这样写是没错的。

另外的几个constant配置就是对convention的常量设置,请看注释。

关于paramsPrepareParamsStack拦截器栈,我准备在第五篇,对基础框架进行扩展的时候再详细的说明。

大家如果等不急想学习下,可以在网上查找这方面的资料先看看。

web大象是这样想的,如果一次讲的太多太复杂不利于理解和吸收,所以对于web 层,大家从前面也看到了,代码很简单,因为本篇主要是讲convention插件的知识,然后实现一部分功能用于演示它的效果。

下面贴上web和WebRoot目录结构、UserAction的代码,以及jsp代码。

请注意web包下面的层次结构,这与你的请求路径相关。

content文件夹是插件默认指定的名字,你可以修改为别的名字。

同样请注意在这个目录下面的文件与子文件夹的定义方式是和web层相同的。

如果还没有理解,请再看下我对convention插件的说明。

在web.xml文件中,设置了一个<welcome-file-list>标签,定义了一个index.jsp,这文件里就一句代码 <%response.sendRedirect("hello.action"); %> 它会去执行HelloAction的execute()方法,这方法里面什么逻辑都没有,直接返回结果页面hello.jsp${ctx}是一个EL表达式,设置的是当前项目名称。

相关文档
最新文档