struts 2.0的简单应用

来源:互联网 发布:mac在线看视频卡 编辑:程序博客网 时间:2024/05/22 03:36

一、重点概要
1、重写struts的Filter
2、页面读取数据直接使用类的set/get方法。
3、注意页面中参数的名字
4、struts标签
二、配置项目的web.xml     
Struts2.0所有的配置被整合在一个Filter里面,该Filter位于StrutsPrepareAndExecuteFilter,因此,在web.xml中应该这样声明:
 <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>
但是,该Filter一个问题,就是从页面传到后台的中文经过这个过滤器后会变成乱码,为了解决这个问题,需要重写这个过滤器,最简单的方法是写一个类继承StrutsPrepareAndExecuteFilter,代码如下:
 package com.cstp.lifuqiang.filter;
 //com.cstp.lifuqiang.filter.MyFilter
 import java.io.IOException;

 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;

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

 public class MyFilter extends StrutsPrepareAndExecuteFilter {
  public void doFilter(ServletRequest req, ServletResponse resp,
    FilterChain chain) throws IOException, ServletException {
   req.setCharacterEncoding("utf-8");
   resp.setCharacterEncoding("utf-8");
   super.doFilter(req, resp, chain);
  }
 }
这时web.xml中相应的地方就改为:
 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>com.cstp.lifuqiang.filter.MyFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 
三、Struts2.0的配置文件
除了在web.xml中配置以外,struts2.0还有几个自己的配置文件,其中最重要的两个是struts.properties和struts.xml,都要放到src目录下。
 
Struts.properties的原文件可以在struts-core-2.0.x.jar中找到,原名叫default.properties,将其解压出来,并改名为struts.properties,放到工程的src目录下,然后还需要修改里面的值。比如:
struts.locale=zh_CN
struts.i18n.encoding=GB2312
修改以后,这样struts才能认识中文。
再比如:
struts.action.extension=action
这是个默认值,意思说,struts的每个action的后缀都是.action。
Struts.xml文件用于配置所有的action,在后文有详细的配置方法。
三、创建JavaBean
创建com.cstp.lifuqiang.model包,确定需要输入的个人信息有“姓名”、“性别”、“地址”、“电话”,因此先定义一个JavaBean,名为Person.java
package com.cstp.lifuqiang.model;
public class Person {
 private String name;
 private String sex;
 private String address;
 private String phone;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public String getPhone() {
  return phone;
 }
 public void setPhone(String phone) {
  this.phone = phone;
 }
}
四、配置struts.xml配置文件
 <?xml version="1.0" encoding="UTF-8" ?>

 <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">

 <struts>
  <package name="lfq" extends="struts-default" namespace="/">
   <action name="check" class="com.cstp.lifuqiang.action.CheckAction"
    method="check">
    <result name="success">/WEB-INF/jspf/check.jsp</result>
   </action>
  </package>
 </struts>

 
五、创建com.cstp.lifuqiang.action包,写CheckAction类,继承ActionSupport
package com.cstp.lifuqiang.action;

//com.cstp.lifuqiang.action.CheckAction
import com.cstp.lifuqiang.model.Person;
import com.opensymphony.xwork2.ActionSupport;

public class CheckAction extends ActionSupport {
 private Person person;

 public String check() {
  return super.SUCCESS;
 }

 public Person getPerson() {
  return person;
 }

 public void setPerson(Person person) {
  this.person = person;
 }
}
六、页面
1、index.jsp 表单
<form action="check.action" method="post">
姓名:<input name="person.name" type="text" /><br />
性别:<select name="person.sex">
  <option value="男">男</option>
  <option value="女">女</option>
   </select><br />
地址:<input name="person.address" type="text" /><br />
电话:<input name="person.phone" type="text" /><br />
<input type="submit" />
</form>

2、check.jsp

<body>
以下是你输入的信息
<hr />
姓名:<font color="red"><s:property value="person.name"/></font><br />
性别:<font color="red"><s:property value="person.sex"/></font><br />
地址:<font color="red"><s:property value="person.address"/></font><br />
电话:<font color="red"><s:property value="person.phone"/></font><br />
</body>


说明:
(1)注意index.jsp中各表单元素的name属性,比如:
<input type="text" name="person.name" />
在表单提交时,struts会在CheckAction类中寻找getPerson()这个方法以及"person"这个成员变量,由于person是Person类的一个对象,它本身还有一个name属性,因此struts还会自动调用该对象的“setName”方法,给name属性赋值,因此,在Person类的定义中各成员变量必须有get、set方法。
我们把"person.name"这样的语句叫做表达式语言(Expression Language,简称为EL)。它由XWork框架提供,XWork表达式语言的核心是OGNL(Object Graph Notation Language),OGNL是一种功能强大,技术成熟,应用广泛的表达式语言。用户在表单中输入的数据,会被保存到一个叫做"值堆栈"(OgnlValueStack)的地方中去,当业务操作完成,结果数据会通过表达式被获取、输出。实际上,在这个例子中,Struts在解析了该表达式语言后,执行了getPerson().setName()方法,把页面上的值赋给person对象的name属性。
 
(2)<s:property>标签作用是在页面上显示一个值。
同样,Struts在解析了表达式语言后,会调用getPerson().getName()方法,读出姓名的值,性别、地址、电话等都是类似的。

原创粉丝点击