Struts2学习笔记
一、入门
1、开发环境
eclipse3.3+myeclipse6.0+tomcat6.0+fedora9.0
2、从http://struts.apache.org/2.x/ 下载struts2的jar包,并解压到一个目录
3、新建一个web工程,将struts2中的lib目录下的commons-logiging-1.0.4.jar、freemarker-2.3.8.jar、ognl-2.6.11.jar、struts2-core-2.0.11.1.jar、xwork.2.0.4.jar导入到新建的工程中
4、配置web.xml文件
在文件中加入以下内容(形式同servlet很相似)
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5、在struts2中有一个重要的配置文件是struts.xml,这个文件是处理客户端与服务器端的控制文件,该文件放在工程目录中的classes文件下,其配置内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<package name=”default”class=“struts-default”>
<!--
中间的部分是以后完成代码之后所配置信息的地方
-->
</package>
6、新建一个新的jsp,在头部将struts2的标签导入到页面中
<%@ taglib uri="/struts-tags" prefix="s" %>
这样便可以使用struts2的标签,新建一个表单
<s:form action="login">
<s:text name="username" lable="用户名:"></s:text>
<s:password name="password" label="密码:"></s:password>
<s:submit label="提交"></s:submit>
</s:form>
(现在可以运行查看一下sutruts2的表单与普通的html表单有什么异同)
7、新建一个java类loginAction.java来处理提交的信息(struts2的表单默认提交方式是post提交),该类继承与ActionSupport。
package com.struts.test;
import com.opensymphony.xwork2.ActionSupport;
public class loginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
从login.jsp中提交过来的信息username,password将会自动被该类中的set方法调用,将值赋到该类的属性当中。
测试一下:新建一个result.jsp
(我们用el表达式)
用户名:${requestScope.username}<br>
密 码: ${requestScope.password}
在loginAction.java中加入
public String execute() throws Exception {
return SUCCESS;}
该方法是与struts.xml文件的的通讯方法
在struts.xml文件的package节点中导入配置文件
<action name="login" class="com.struts.test.loginAction">
<result>/result.jsp</result>
</action>
action name = “这是表单提交的名字” class=”参考servlet的type/class属性”
result 这是 返回结果所要提交的页面(默认使用转发的方式,可以改为重定向。
有人会说,execute()方法中的success有什么用?
其实这个success是针对于struts.xml文件的result属性的,struts2中的默认就是success。
所以为了更明确的显示,把上面的struts.xml修改为:
<action name="login" class="com.struts.test.loginAction">
<result type=”success”>/result.jsp</result>
</action>
我们执行一下这个程序,你会发现你所输入的信息会显示到result.jsp中
8、这样的程序不够完美,我们加入以下功能
(1)、用户名与密码不能为空
(2)、只有用户名输入hello,密码输入world时,才可以将内容提交到result.jsp中
在新建loginAction类时,继承了ActionSupport,所以loginAction中就有了一个用于验证 的方法,我们覆盖它,实现我们想要的功能。
public void validate() {
if(null==this.getUsername()||"".equals(this.getUsername().trim()))
{
this.addFieldError("username", "用户名不能为空");
}
if(null==this.getPassword()||"".equals(this.getPassword().trim()))
{
this.addFieldError("password","密码不能为空!");
}
}
实现了这个方法后,我们还需要修改struts.xml文件
<action name="login" class="com.struts.test.loginAction">
<result name="input">/login.jsp</result>
<result name="success">/result.jsp</result>
</action>
增加了<result name="input">/login.jsp</result>在验证没有通过的时候就会调用input
现在执行一下程序,看看结果。
下面,我们加入验证特定用户名与密码的功能
修改execute()方法
public String execute() throws Exception {
if("hello".equals(this.getUsername().trim())&&"world".equals(this.getPassword().trim()))
{
return SUCCESS;
}
else
{
this.addFieldError("username", "用户名或密码错误!");
return "failer";
}
}
修改struts.xml文件
在action节点下增加 <result name="failer">/login.jsp</result>
功能完成,执行一下---
注意:刚才的验证功能不应该出现在execute()方法中,应该写在业务逻辑类中。
this.addFieldError("username", "用户名或密码错误!");这个方法是添加错误提示信息的,第一个属性是说错误信息出现在什么位置,第二个是错误信息。
具体内容可以查看struts2的帮助文档!