Struts2学习二(Struts2的常用功能)

来源:互联网 发布:java输出1到100的素数 编辑:程序博客网 时间:2024/06/06 05:24

1、Struts2常用功能

Struts2作为一个MVC应用程序的框架,能够解决web应用程序开发过程中的一些常见问题提供解决方案
1、获取表单内容,封装成对象(封装请求参数)
2、类型转换(8种基本数据类型,Date,数组,List,Map)
2、根据请求的参数转发给适当的控制器
3、校验(手动校验,xml校验)
4、国际化(i18n)
5、拦截器

2、封装请求参数

Struts2通过ModelDriven实现请求参数的封装
步骤如下

  1. 实现接口:ModelDriven
  2. 编写方法:public User getModel() { return user ; }
  3. 提供成员变量:private User user = new User();

ModelDriven 机制
Struts2提供提供使用领域的对象方式,就是ModelDriven接口
通过ModelDriven接口可以直接操作应用程序中的领域对象,允许在web层和业务层使用相同的对象。

public  Object  getModel(){ returnnull; } 

该方法返回一个用于接收用户输入数据的对象模型

这里写图片描述
示例代码
1、JavaBean类User

public class User {    private String userName;    private String upserPwd;    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getUpserPwd() {        return upserPwd;    }    public void setUpserPwd(String upserPwd) {        this.upserPwd = upserPwd;    }}

2、UserAction类

public class UserAction extends ActionSupport implements ModelDriven<User>{    private User user =new User();    public User getModel() {        // TODO Auto-generated method stub        return user;    }    public String add(){        return SUCCESS;    }}

3、web.xml文件中添加filter

<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>

4、form.jsp和success.jsp

<body>    <form action="${pageContext.request.contextPath}/userAction" method="post">        用户名<input type="text" name="userName"> <br/>        密码<input type="text"name="upserPwd"><br/>         <input type="submit" value="提交">    </form></body>

success.jsp

<body>    action success. <br>  </body>

5、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>    <constant name="struts.devMode" value="true"></constant>    <package name="demo" namespace="/" extends="struts-default">        <action name="userAction" class="com.example.demo.UserAction"    method="add">            <result>/a/success.jsp</result>        </action>    </package></struts>

3、数据校验

在web开发中数据校验可以是JavaScript,也可以是struts校验。但是JavaScript不安全,面的是在浏览器端进行的校验,服务器端也必须对数据进行校验

struts校验方式
1、xml校验

2、注解校验

这里写图片描述
示例代码
流程
1、Customer类

public class Customer {    private String username;    private String password;    private String repassword;    private String email;    private int age;    private Date birthday;    private String gender;    private String cardid;    public String getName() {        return username;    }    public void setName(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getRepassword() {        return repassword;    }    public void setRepassword(String repassword) {        this.repassword = repassword;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    public String getGender() {        return gender;    }    public void setGender(String gender) {        this.gender = gender;    }    public String getCardid() {        return cardid;    }    public void setCardid(String cardid) {        this.cardid = cardid;    }    @Override    public String toString() {        return "Customer [name=" + username + ", password=" + password                + ", repassword=" + repassword + ", email=" + email + ", age="                + age + ", birthday=" + birthday + ", gender=" + gender                + ", cardid=" + cardid + "]";    }}

2、CustomerAction

public class CustomerAction extends ActionSupport implements        ModelDriven<Customer> {    private Customer customer = new Customer();    public Customer getModel() {        // TODO Auto-generated method stub        return customer;    }    public String register(){        System.out.println("customer----"+customer);        return NONE;    }}

3、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>    <constant name="struts.devMode" value="true"></constant>    <package name="demo" namespace="/" extends="struts-default">        <action name="customerAction_*" class="com.example.demo2.CustomerAction"            method="{1}">            <result name="input">/b/form.jsp</result>        </action>    </package></struts>

4、form.jsp表单

<body>    <s:fielderror></s:fielderror>    <h2>注册</h2>    <form action="${pageContext.request.contextPath}/customerAction_register"        method="post">                     用户名<input type="text" name="username" value="1234" > <br />         密码<input type="text" name="password" ><br />         确认密码<input type="text"name="repassword"><br />         邮箱<input type="text" name="email"><br />         年龄<input type="text" name="age"><br />         生日 <input type="text" name="birthday"><br />         性别<input type="text"name="gender"><br />         身份证<input type="text" name="cardid"><br />        <input type="submit" value="提交">    </form></body></html>

5、CustomerAction-customerAction_register-validation.xml文件配置

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC        "-//Apache Struts//XWork Validator 1.0.3//EN"        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators>    <!-- #1 用户名 -->    <field name="username">        <field-validator type="requiredstring">            <message>用户名必填</message>        </field-validator>    </field>    <!-- #2 密码-->    <field name="password">        <field-validator type="requiredstring">            <message>密码必填</message>        </field-validator>        <field-validator type="stringlength">            <param name="minLength">2</param>            <param name="maxLength">12</param>            <message>密码必须在${minLength}-${maxLength}字符之间</message>        </field-validator>    </field>    <!-- #3 确认密码 -->    <field name="repassword">        <field-validator type="fieldexpression">            <param name="expression"><![CDATA[password == repassword]]></param>             <message>密码 和 确认密码 不一致</message>        </field-validator>    </field>    <!-- #4 邮箱 -->    <field name="email">        <field-validator type="email">            <message>电子邮箱格式不正确。</message>        </field-validator>    </field>    <!-- #5 年龄 -->    <field name="age">        <field-validator type="int">            <param name="min">0</param>            <param name="max">120</param>            <message>年龄必须是${min}-${max}之间一个数</message>        </field-validator>    </field>    <!-- #5 生日 -->    <field name="birthday">        <field-validator type="date">            <param name="min">1980-01-01</param>            <param name="max">2000-12-31</param>            <message>生日必须是${min}-${max}之间</message>        </field-validator>    </field>    <!-- #6 性别 -->    <field name="gender">        <!-- 如果没有选择,服务器获得性别为null -->        <field-validator type="required">            <message>性别必须选择</message>        </field-validator>    </field>    <!-- #7 身份证 -->    <field name="cardid">        <field-validator type="regex">            <param name="regexExpression">[\d]{6}-[\d]{8}-[\d]{4}</param>            <message>身份证必须是一下格式</message>        </field-validator>    </field></validators>
2 0