关于Struts2框架的学习(三)

来源:互联网 发布:冠林数据系统 编辑:程序博客网 时间:2024/05/19 18:43

一、关于strtus2的配置

<?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>    <!--常量配置constant-->    <!--乱码解决-->    <constant name="struts.i18n.encoding" value="UTF-8"/>    <!--设置自定义扩展名-->    <constant name="struts.action.extension" value="action,,"/>    <!--设置开发模式-->    <constant name="struts.devMode" value="true"/>    <!--自动装载-->    <constant name="struts.configuration.xml.reload" value="true"/>    <!--       第二种方式配置常量,在src下新建一个strtus.properties的配置文件也可以;    -->    <!--团队开发的常量设置,通过include添加不同人员的配置文件-->    <include file="config/strtus/user.xml"/>    <!--    name:名称自定义,可以配置多个包    extends必须写,直接或间接继承struts-default name自定义    namespace:命名空间,不同模块可以指定不同的空间    -->    <package name="hello" namespace="/" extends="struts-default">        <!--配置默认的action,当所请求的action不存在时,执行默认的action-->        <default-action-ref name="default"/>        <!--配置默认执行的class-->        <default-class-ref class="com.yaoyao.LoginAction"/>        <!--配置全局结果集,位置在action的前面-->        <global-results>            <result name="login">/login.jsp</result>        </global-results>        <!--        name请求名称,不要写 /,也不用加后缀;        class对应action完全限定名,要求包名+类名,并且该类是有公共的无餐构造方法的,在action的配置中,如果不去        配置class,将会由默认的action来执行,默认的action类是ActionSupport类        method:配置处理类的请求处理方法,默认为execute;方法要满足公共的,返回值类型是String,无参数        method和name无关,        -->        <action name="hello" class="com.yaoyao.HelloAction" method="execute">            <!--            结果集            name和对应action的方法的返回值匹配,默认是success            type:结果的处理类型,默认是dispather转发            type有哪些:            <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>            <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>            <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>            <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>            <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>            <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>            <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />            <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />            chain:指的是action链,链接下一个action,执行actionA以后直接执行actionB后直接执行actionC,用的比较少,地址栏是执行的第一个action            dispather:指的是转发,特点和servlet一致,如果request中有数据到视图显示,使用dispather            redirect:重定向,如果是重定向到jsp页面,可以直接重定向,如果是重定向到另一个action,需注意是否配置的了action的后缀名,如果要求有后缀名,
            那么重定向 的action一定要加上后缀名称            redirectAction:重定向到另一个action,不用加后缀的后缀名,会将前一个action的后缀名自动加上。            stream:以流的形式显示-文件下载            -->            <result>/index.jsp</result>        </action>        <action name="default">            <result>/login.jsp</result>        </action>    </package>   </struts>
二、Action的三种实现方式

1.定义一个pojo类:自定义一个普通的java类即可,不具有侵入性

2.实现Action接口,可以使我们的代码更加规范。

3.继承ActionSupport类,可以继承一些ActionSupport实现的功能,如验证,官方推荐使用此种方式。

三、以对象的方式处理表单数据

1.属性驱动

jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>注册页面</title></head><body>    <form action="register.action" method="post">        用户名:<input type="text" name="user.name"><br>        密码:<input type="password" name="user.pwd"><br>        年龄:<input type="text" name="user.age"><br>        邮箱:<input type="email" name="user.email"><br>        <input type="submit" value="注册">    </form></body></html>
action代码:

package com.yaoyao.action;import com.opensymphony.xwork2.Action;import com.yaoyao.entity.User;public class UserAction {    private User user;    //注册    public String register(){        System.out.print(user.toString());        return Action.SUCCESS;    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }}
strtus.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>    <package name="default" namespace="/" extends="struts-default">        <action name="register" class="com.yaoyao.action.UserAction" method="register">            <result name="success">/show.jsp</result>        </action>    </package></struts>
User.java

package com.yaoyao.entity;public class User {    private String name;    private String pwd;    private int age;    private String email;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    @Override    public String toString() {        return "User{" +                "name='" + name + '\'' +                ", pwd='" + pwd + '\'' +                ", age=" + age +                ", email='" + email + '\'' +                '}';    }}
重点就是jsp页面的name属性赋值方法。

2.模型驱动(ModelDriven)

jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>注册页面</title></head><body>    <form action="regModel.action" method="post">        用户名:<input type="text" name="name"><br>        密码:<input type="password" name="pwd"><br>        年龄:<input type="text" name="age"><br>        邮箱:<input type="email" name="email"><br>        <input type="submit" value="注册">    </form></body></html>
action类:

package com.yaoyao.action;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ModelDriven;import com.yaoyao.entity.User;public class UserModelAction implements ModelDriven<User> {    private User user = new User();    public String register(){        System.out.print(user.toString());        return Action.SUCCESS;    }    public User getModel() {        return user;    }}

属性驱动和模型驱动都可以,通常来说,如果属性较多,可以使用模型驱动。















0 0
原创粉丝点击