Struts2入门案例

一、Struts2是什么?
Struts2是一个基于MVC设计模式的Web应用框架,相当于一个Servlet,Struts2作为一个Controller来建立模型与视图的数据交互。Struts2以WebWork为核心,采用拦截器的机制来处理用户请求。业务逻辑控制器和ServletAPI完全脱离。

二、Struts2的使用?
以struts-2.3.14为例:
1、下载Struts2的jar包。新建一个web项目并将需要的jar包导入。不同版本要的包不同,不知道导哪些包的时候,一个保险方法是将struts\apps文件夹下的struts2-blank.war包打开。将里面的WEB-INF\lib下的包导入自己的项目。

2、Struts2配置,配置web.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        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>Struts2Demo</display-name>

        <!-- Struts2的过滤器,请求都被映射到Struts2上 -->
        <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>

3、配置strute.xml文件,配置Action。(可以放在src下,也可以放在WEB-INF/classes下面)

<?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>
        <!-- 配置文件中,包名不重复即可。自己创建的包最好都继承struts-default包,该包提供了绝大多数的功能-->
        <package name="struts2" extends="struts-default">
            <!-- action元素与表单对应 -->
            <action name="login" class="fang.LoginAction">
                <result name="success">/welcome.jsp</result><!-- result为action处理结果 -->
                <result name="error">/error.jsp</result>
            </action>
        </package>
    </struts>

4、写一个对应的Action,继承自ActionSupport。

import com.opensymphony.xwork2.ActionSupport;

    public class LoginAction extends ActionSupport {

        private static final long serialVersionUID = 1L;

        private String name;
        private String passwd;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getPasswd() {
            return passwd;
        }

        public void setPasswd(String passwd) {
            this.passwd = passwd;
        }

        @Override
        public String execute() {
            if ("admin".equals(name) && "admin".equals(passwd)) {
                return SUCCESS;
            } else
                return ERROR;
        }
    }

5、对应的JSP文件
(1)login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title><s:text name="登陆页面"/></title>
    </head>

    <body>
        <s:form action="login"><!--action的值对应于struts.xml文件中的<action ...> 中的name属性-->
            <s:label value="请登录"/><!-- 文字标签-->
            <s:textfield name="name" key="用户名"/><!--文本框-->
            <s:textfield name="passwd" key="密码"/>
            <s:submit value="登录"/>
        </s:form>
    </body>
    </html> 

(2)welcom.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title><s:text name="欢迎页面"/> </title>
    </head>
    <body>
         欢迎您,<s:property value="name"/><!--显示Action中的account属性-->
    </body>
    </html>

(3)error.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title><s:text name="登录失败页面"/> </title>
    </head>
    <body>
        <s:text name="登录失败。。。"/>
    </body>
    </html>

执行:http://localhost:8080/Struts2Demo/login.jsp

三、几点说明
1、Struts2的工作流程:
Struts2抛弃了request、response等Servle API。在调用Action的执行方法(如:execute)前,struts2
的会从request中获取参数,并通过setter方法设置到Action属性。

访问到login.jsp后,找到表单要提交到的action:;Struts2截获所有的请求;
通过action的值,在struts.xml配置文件中找到对应的Action。生成一个Action实例,并并将提交的数据设置到该实例中;调用execute()主方法;
根据执行完对应的Action后返回结果,struts.xml配置文件中/welcome.jsp
/error.jsp
展现对应的jsp页面。

2、Struts2中每个Action有多个实例(Struts1中所有的Action只有一个实例。)每处理一次请求生成一个实例,处理完即销毁。因此Struts2是线程安全的。

3:Action:
(1)自定义Action一般直接继承自ActionSupport类,定义变量,重写execute()方法。变量的值被Struts2通过setter方法自动复制,execute直接使用即可。
execute的执行结果返回值配置在中。
(2)事实上任何的POJO都可以作为Action,只要该Action有public String execute()方法。
这样的好处是不与Struts2发生耦合,代码不依赖Struts2类库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值