1、Struts2常用功能
Struts2作为一个MVC应用程序的框架,能够解决web应用程序开发过程中的一些常见问题提供解决方案
1、获取表单内容,封装成对象(封装请求参数)
2、类型转换(8种基本数据类型,Date,数组,List,Map)
2、根据请求的参数转发给适当的控制器
3、校验(手动校验,xml校验)
4、国际化(i18n)
5、拦截器
2、封装请求参数
Struts2通过ModelDriven实现请求参数的封装
步骤如下
- 实现接口:ModelDriven
- 编写方法:public User getModel() { return user ; }
- 提供成员变量: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>