首页 > 代码库 > 【SSH三大框架】Struts2基础第一篇:编写第一个Struts2程序

【SSH三大框架】Struts2基础第一篇:编写第一个Struts2程序

本年八月份的时候已经是把SSH三层框架学完了,然后又转战Android开发,已经很久没用三大框架做东西了,所以想要花三四天的时间复习一下,就写在博客上。

附带SSH所有jar包网盘下载地址:http://pan.baidu.com/s/1hqf5ta8


首先,我们新创建一个web项目,然后引入jar包:commons-fileupload,commons-io,freemarker,javassist,ognl,struts2-core,xwork-core。

这里只是个简单的struts程序,所以仅仅引入了这些jar包


接下来,我们就是配置web.xml的内容了,web.xml:

<?xml version="1.0" encoding="GBK"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

	<!-- 定义Struts2的核心Filter -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<!-- 让Struts2的核心Filter拦截所有请求 -->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
这里边是定义了一个Struts2的核心拦截器,Struts2的核心就是围绕拦截器而生的


然后,我们写一个登陆的页面:login.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
	pageEncoding="GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title><s:text name="loginPage"/></title>
</head>
<body>
<s:form action="login">
	<s:textfield name="username" key="user"/>
	<s:textfield name="password" key="pass"/>
	<s:submit key="login"/>
</s:form>
</body>
</html>
这里用到了struts2的标签库,在以后会做介绍


在login.jsp我们为form表单定义了一个action,是在点击login之后跳转的作用,在学servlet的时候应该都用过。

这个action我们可以在struts.xml中定义,这个struts.xml我们一般是放在src目录下边,也可以变化(不过也要改变相应的路径)

struts.xml:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- 指定Struts 2配置文件的根元素 -->
<struts>
	<!-- 指定全局国际化资源文件 -->
	<constant name="struts.custom.i18n.resources" value=http://www.mamicode.com/"mess"/>>这里其它的东西不用管,我们看下<package></package>标签中的内容,这里边定义了一个action,设置name属性为“login”,class属性为:LoginAction

然后下边是三个result,分别有各自的name属性。

这个struts.xml的作用就是:当页面发来请求,由struts.xml处理,跳转到相应的java处理程序,然后通过java处理程序跳转到相应的result页面


然后,我们看LoginAction.java:

package org.crazyit.app.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport
{
	//定义封装请求参数的username和password属性
	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;
	}
	//定义处理用户请求的execute方法
	public String execute() throws Exception
	{
		//当username为crazyit.org,password为leegang时即登录成功
		if (getUsername().equals("crazyit.org")
			&& getPassword().equals("leegang") )
		{
			ActionContext.getContext().getSession()
				.put("user" , getUsername());
			return SUCCESS;
		}
		else
		{
			return ERROR;
		}
	}
}
在LoginAction.java中我们定义了两个属性:username和password,并且定义了一个execute()方法,这个方法是默认的sruts处理方法

在这个execute方法中,我们定义了一个处理的逻辑,

这个逻辑规定用户名和密码等于XXX的时候,利用ActionContext.getContext().getSession().put()函数,添加一个属性user,内容为:getUsername()。并且,return SUCCESS。

这里的SUCCESS对应的就是struts.xml中的<result name="success">/welcome.jsp</result>


PS:需要注意的一点,我们可以return任何的一个字符串,只要在struts.xml中有与其对应的result即可。这里是由于继承了ActionSuppot,所以SUCCESS没有加上双引号,因为SUCCESS在ActionSuppot中默认为“success"字符串。


然后,我们执行:http://localhost:8080/Struts2Demo/login.jsp就可以执行相关的操作了




【SSH三大框架】Struts2基础第一篇:编写第一个Struts2程序