Struts2--请求的配置与注解
来源:互联网 发布:网卡mac地址修改 编辑:程序博客网 时间:2024/06/09 20:27
官方文档:http://struts.apache.org/docs/
1 基于配置文件的处理请求Demo
在SayHello.jsp页面填写对谁说Hello,提交后后台处理跳转到处理页面。
web.xml配置
<!-- 核心控制器 --> <filter> <filter-name>struct2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struct2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>
核心控制器StrutsPrepareAndExecuteFilter过滤请求
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> <!-- extends必须写,直接或者 间接继承struts-default namespace中必须添加/--> <package name="default" namespace="/" extends="struts-default"> <!-- name对应请求名,不能在字符前添加/ class对应请求处理函数--> <action name="HelloWorld" class="com.tang.struct.HelloWorld"> <!-- name对应execute的返回值,对应返回不同的页面 --> <result name="success">/HelloWorld.jsp</result> </action> </package></struts>
将指定URL配置由指定的类的指定方法来处理。result可以配置成转发请求的形式。如下例:
<result name="success" type="redirectAction">list</result>
请求处理类及方法:
public class HelloWorld extends ActionSupport { //请求的字段,对应于请求URL中?后的字段 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } /** * 处理URL请求 */ public String execute() { name = "Hello, " + name + "!"; System.out.println("输出"); return SUCCESS; }}
URL?后的字段对应类中的属性。
入口页面:
<html> <head> <title>Say Hello</title> </head> <body> <h3>Say "Hello" to: </h3> <s:form action="HelloWorld"> 在action后添加/ Name: <s:textfield name="name" /> <s:submit /> </s:form> </body></html>
中的name映射到控制层中类的属性中。
结果跳转页面:
<html> <head> <title>Hello</title> </head> <body> <h3><s:property value="name" /></h3> </body></html>
中的name值对应execute中重新赋值的变量。
1.2 请求链,将该个请求转到指定空间中的指定处理name名,即为一个链条。需要配置Chaining Interceptor拦截器,默认在struts-default.xml中已配置。
JSP页面:
<body> <form action="hello01/hello01" method="post"> 用户名:<input type="text" name="name"/><br> <input type="submit" value="登录"/> </form> </body>
第一个请求处理类:
public class Hello01Action { private String name; public String hello01(){ System.out.println("hello01"+name); return Action.SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
第二个请求:
public class Hello02Action { private String name; public String hello02(){ System.out.println("hello02"+name); return null; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
配置信息:
<struts> <package name="hello01" extends="struts-default" namespace="/hello01"> <action name="hello01" class="com.tang.struts01.Hello01Action" method="hello01"> <result type="chain"> <!-- 将请求转到另外一个namespace的指定action --> <param name="namespace">/hello02</param> <param name="actionName">hello02</param> </result> </action> </package> <package name="hello02" extends="struts-default" namespace="/hello02"> <action name="hello02" class="com.tang.struts02.Hello02Action" method="hello02"> </action> </package></struts>
在两个请求处理方法中均打印出传递属性。
运行结果:
1.3 action创建监听类,用来监控action的创建,具体看代码中的注释:
public class MyActionEventListener implements ActionEventListener { /** * 当action抛出异常时执行 * @param stack 当前stack */ @Override public String handleException(Throwable arg0, ValueStack arg1) { // TODO Auto-generated method stub System.out.println("handleException"); return null; } /** * 在action创建之后执行 * @param action 当前action * @param stack 当前stack * @return 当前action */ @Override public Object prepare(Object arg0, ValueStack arg1) { // TODO Auto-generated method stub System.out.println("prepare"); return arg0; }}
2 基于注解的配请求映射。
Struts.xml中不用配置任何。映射请求均在方法中。
请求处理类:
import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Namespace;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import com.opensymphony.xwork2.ActionSupport;//设置该类的命名空间@ParentPackage(value="struts-default")@Namespace("/")public class HelloAction extends ActionSupport{ //使用注解将URL请求映射到该方法中 @Action(value="/hello", results={@Result(name="success",location="/index.jsp")}) public String execute(){ System.out.println("hello action"); return "success"; }}
可让不同的URL由相同的方法来处理,该注解可让多个URL映射到相同的方法中,同时也可返回多个JSP文件中。
如下:
@Actions({ @Action("/different/url"), @Action("/another/url") })
也可在类级别通过注解方式配置返回页面,如下:
@Results({ @Result(name="failure", location="fail.jsp")})public class HelloWorld extends ActionSupport { @Action(value="/different/url", results={@Result(name="success", location="http://struts.apache.org", type="redirect")} ) public String execute() { return SUCCESS; }}
3 namespace
3.1 注解
处理类:
@Namespace("/custom")public class HelloWorld extends ActionSupport { @Action("/different/url") public String execute() { System.out.println("execute"); return null; } @Action("/url") public String doSomething() { System.out.println("doSomething"); return null; }}
结果:
http://localhost:8080/Struts04/custom/different/url映射到了doSomething()方法中。
http://localhost:8080/Struts04/custom/url 映射到了doSomething()方法中。
http://localhost:8080/Struts04/different/url链接能映射到execuet()方法中。
http://localhost:8080/Struts04/url 映射到了doSomething()方法中。
这其中的映射为也是醉了。暂不解其中原理。
- Struts2--请求的配置与注解
- struts2 的注解配置
- Struts2使用注解,完成请求响应,实现零配置
- struts2的注解配置全面解析
- struts2注解下的拦截器配置
- Struts2基于注解的Action配置
- struts2基于注解的拦截器配置
- Struts2基于注解的Action配置
- Struts2基于注解的Action配置
- Struts2基于注解的Action配置
- Struts2基于注解的Action配置
- Struts2基于注解的Action配置
- Struts2基于注解的Action配置
- Struts2基于注解的Action配置
- Struts2基于注解的Action配置
- Struts2基于注解的Action配置(一)
- Struts2基于注解的Action配置(二)
- Struts2基于注解的Action配置
- C语言考试练习题_排列
- iOS实现记住密码功能
- 利用Python实现在同一网络中的本地文件共享
- 多线程问题
- Java实现多线程的两种方式
- Struts2--请求的配置与注解
- 如何用几行代码读取目录下所有的图片
- IntelliJ Idea 常用快捷键列表
- c scanf 函数问题
- 《剑指offer》二进制中1的个数
- 消息中间件的应用场景
- 【C语言训练】尼科彻斯定理
- MySQL常用命令
- 面向对象的六大原则