【Struts2一】Struts2 Hello World

编程技术  /  houtizong 发布于 3年前   94

Struts2 Hello World应用的基本步骤

创建Struts2的Hello World应用,包括如下几步:

1.配置web.xml

2.创建Action

3.创建struts.xml,配置Action

4.启动web server,通过浏览器访问

 

配置web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1">    <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></web-app>

 

 Struts2通过过滤器Filter的方式处理指定URL格式的请求,

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

 的init方法默认从WEB-INF/classes目录下查找struts.xml文件并进行解析,所以,struts2.xml文件默认应该放到WEB-INF/classes目录下

 

创建Action

 

package com.tom.actions;public class HelloWorldAction {    private String message;    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }    public String executeAction() {        setMessage("Welcome to the Struts2 world");        return  "success";    }}

 

HelloWorldAction是一个Action,没有特别的东西,executeAction是在struts2.xml中指定来响应某个请求时要执行的方法,返回值必须是String类型(???),“success”这个返回值对应于strtus2.xml中定义的某个页面的转发(forward)

 

 

创建并配置struts.xml

Struts2默认从在WEB-INF/classes目录下加载struts.xml文件

 

<!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"        "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>    <package name="/simple" namespace="/simple" extends="struts-default">        <action name="helloworld" class="com.tom.actions.HelloWorldAction" method="executeAction">            <result name="success">/htmls/user.jsp</result>        </action>    </package></struts>

 

解释:1.package

package类似于Java的包,表示将一个业务模块相关的Action组织到一起,比如针对用户管理模块的Action可以放到name="/user"的包中

2.namespace

namespace是包中所有定义的Action的访问url的共同前缀,比如根据上面的配置,HelloworldAction的访问url是http://ip:port/contextroot/simple/helloworld

3.extends

表示这个包继承自struts-default这个抽象定义的包,抽象包表示package有个属性abtract设置为true,抽象包不能定义任何Action,所有的package都应该直接或者简洁继承struts-default才能称为一个包,都泽就不是一个包,namespace等属性不能起到Action访问url前缀的作用

4.action

定义一个action,package底下可以定义多个action,name属性表示action的名字,也是访问Action的url的最后的一部分。class属性表示要执行的Action的类,method属性表示要执行哪个方法,不指定method属性,则默认执行execute方法

5.result表示结果的响应往哪forward,name值和action的方法返回之匹配,其中的/htmls/usr.jsp表示相对于web应用跟目录的相对路径,

 

 

创建user.jsp

<!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title>User.jsp</title></head><body>    Hello, ${message}</body></html>

 

请求Action

http://localhost:8688/web/simple/helloworld

 

页面的url地址不变,页面显示Welcome to the Struts2 world

 

响应请求的Action的查找顺序

1.当请求http://localhost:8688/web/simple/helloworld时,能够找到HelloWorldAction

2.当请求http://localhost:8688/web/simple/A/B/C/D/helloworld时,同样能够找到HelloWorldAction,原因是struts2在查找响应请求的Action时,对于namespace有一个查找数序:

  a.首先查找值为simple/A/B/C/D的namespace,找到则找helloworld这个action,如果找到,则匹配上;否则,action查找失败,返回404

  b.如果查找不到值为simple/A/B/C的namespace,则找值为simple/A/B/C的namespace,找到则找helloworld这个action,如果找到,则匹配上;否则,action查找失败,返回404

  c.以此类推,最后查找值为simple的namespace,找到则找helloworld这个action,如果找到,则匹配上;否则,action查找失败,返回404(此时匹配了HelloWorldAction的配置,所以能够正确响应)

  d.如果simple这个namepace也没有找到,则查找默认的namespace(值为长度为零的字符串,namespace=""),如果没有找到这个默认的namespace,则返回404;如果找到默认的namespace,则在默认namespace下查找helloworld这个action,如果找到,则匹配上;否则,action查找失败,返回404

3. 根据上面的查找规则http://localhost:8688/web/XXX/simple/helloworld则匹配失败,即HelloWorldAction匹配不上,所以会返回404

4. 根据上面查找顺序的分析,不同package的name不能相同,同时不同package的namespace也不能相同,否则对同一个请求有可能出现有两个以上的Action匹配成功,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客