最近在学习SSH框架,通过用struts实现一个简单的登陆功能,来学习struts相关知识,着重了解了struts的配置。
1、在Eclipse下创建StrutsDemo项目,并将struts2所必须的jar包导入lib目录下。
主要有如下7个jar包:commons-fileupload、commons-io、freemarker、javassiat、ognl、struts2-core、xwork。
2、在src目录下建立一个struts.xml文件用于配置struts。
struts.xml内容如下:
<?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"> <struts> <!-- struts2的action必须放在一个指定的包空间下定义 --> <package name="default" namespace="/" extends="struts-default"> <action name="login" class="com.demo.LoginAction" method="execute"> <result name="success">/WEB-INF/success.jsp</result> <result name="login">/WEB-INF/login.jsp</result> </action> </package> </struts>
主要属性说明:
package-name:用于区别不同的package;必须是唯一的、可用的变量名;用于其它package来继承;
package--namespace:用于减少重复代码(和struts1比较);包的namespace属性用于定义该包的命名空间,命名空间作用为访问该包下的action路径的一部分。namespace属性可以不配置,如果不指定该属性,默认的命名空间为””。
package--extends:用于继承其它package以使用里面的过滤器等东东;
action--name:用于在一个package里区别不同的action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分;
action--class:action所在的路径(包名+类名);
action--method:action所调用的方法名;
action元素method属性,默认值为method=”execute”,也就是当action接收到请求后,交给哪个方法去处理,默认的是交给execute方法去处理,当然,也可以交给其他方法。
struts-default定义了这些拦截器和Result类型,可以这么说,当包继承了struts-default才能使用struts2提供的核心功能,struts-default包是在struts2-core-2.xx.jar文件中的struts-defalut.xml中定义。struts-default.xml也是struts2默认配置文件,struts2每次都会自动加载struts-default.xml文件。
result元素主要定义视图的跳转和返回的行为及类型。
常用开关的介绍<constant name="struts.enable.DynamicMethodInvocation" value="false"/>动态方法调用,可以解决多个请求对应一个Servlet的问题,后面详细讲解,默认为true,关闭则设为false.
3、在web.xml中加入struts2 MVC框架启动配置
web.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <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> <welcome-file-list> <welcome-file>/WEB-INF/index.jsp</welcome-file> </welcome-file-list> </web-app>4、在src目录下新建LoginAction类。
LoginAction.java代码如下:
package com.demo; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { /** * */ private static final long serialVersionUID = -1438866827399732426L; private String username; private String password; @Override public String execute(){ System.out.println("run execute..."); if("admin".equals(username) && "123456".equals(password)){ return SUCCESS; } return LOGIN; } public String getUsername(){ return username; } public void setUsername(String name){ this.username = name; } public String getPassword(){ return password; } public void setPassword(String password){ this.password = password; } }
注:LoginAction类继承了ActionSupport类,并且在execute方法的返回里,使用了SUCCESS和LOGIN变量。它们俩对应的值分别为:success、login(小写)。所以,在struts.xml里配置的result的name属性里,必须写为小写。要不然,会报"Could not find action or result"的错误。
LoginAction有两个属性,Struts会自动把输入框中的内容通过getter、setter方法设置进来。
提交数据后,struts会自动调用execute方法。
返回值代表结果页面的名称,具体文件路径在配置文件中配置。
ActionSupport类的作用 :struts2不要求我们自己设计的action类继承任何的struts基类或struts接口。但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。
Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。
5、创建login.jsp页面和success.jsp页面
login.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!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=UTF-8"> <title>Insert title here</title> </head> <body> <s:form action="login" method="post"> <s:label value="系统登陆"></s:label> <s:textfield name="username" label="账号" /> <s:password name="password" label="密码" /> <s:submit value="登录" /> </s:form> </body> </html>success.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!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=UTF-8"> <title>Insert title here</title> </head> <body> <h2>欢迎<s:property value="username"/>!</h2> </body> </html>6、经过上述步骤,登录实例已经编写完毕。运行效果如下图:
登陆界面:在访问的时候加了action后缀,我这里不加就访问不了。照说应该是不加也行的。
登陆成功界面:
7、总结:对struts2进行了入门学习,尤其仔细看了struts配置的相关资料。学习struts是掌握SSH的第一步。千里之行,始于足下嘛。
原文地址:http://blog.csdn.net/dutsoft/article/details/41513131