`

二、通过《用户登录案例》学习struts2框架的应用

阅读更多

使用Struts 2 开发“用户登录”的基本步骤:

1、加载Struts2 类库

2、配置web.xml

3、开发视图层页面

4、开发控制层Action

5、配置Struts 2的配置文件(struts.xml)

6、部署、运行项目

 

第一步:加载Struts2 类库:

从官方下载下来的lib目录中有很多jar包,有些jar不是我们程序必须的,没必要加载进来,只需加载项目需要的即可,从而减少程序的开销。

那么哪些jar是我们必须的呢?参看官方下载的apps文件夹中的struts2-blank这个示例程序。这个示例程序提供的Jar就是项目需要的基本jar包。


 

第二步:配置web.xml

核心控制器, 需要在web.xml中进行配置,对框架进行初始化,以及处理所有的请求。

注意:struts2不同版本的核心控制器是不同的,如:

2.0版本的核心控制器为org.apache.struts2.dispatcher.FilterDispatcher; 

2.1之后的版本普遍采用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。 

<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可以包含一些初始化参数,经常使用的如config指定要加载的XML形式的配置文件列表(多个配置文件以逗号分隔),如果没有设置这个参数,会自动加载classes目录下的struts.xml配置文件。

该过滤器会过滤用户请求,如果用户请求以action结尾,则该请求将被输入struts2框架进行处理。

 

第三步:开发视图层页面-index.jsp、success.jsp

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>login page</title>
  </head>  
  <body>
      <div>
      		<s:fielderror name="errormsg" cssStyle="color:red"/>
      </div>
      <s:form action="login.action">
      		<div>
      			<s:textfield name="username" label="用户名"/>
      		</div>
      		<div>
      			<s:password name="password" label="密码"/>
      		</div>
      		<s:submit value="提交" />
      </s:form>
  </body>
</html>

在开发页面时我们应用struts2标签,在使用struts标签时需要注意以下几点:

1、必须引入struts的标签库 <%@taglib prefix="s" uri="/struts-tags"%>

2、struts2的标签都是以"s"为前缀的。

3、可以选择用struts2的UI标签实现页面效果 

<s:textfield name="username" label="用户名"/>

注意:我们运行项目查看源代码时发现,生成了如下的html代码,通过表格来固定的画面的样式。

<tr>
    <td class="tdLabel">
        <label for="login_username" class="label">用户名:</label>
    </td>
    <td>
       <input type="text" name="username" value="" id="login_username"/>   
    </td>
</tr>
如果上述效果不是你所需要的,那么你可以通过更改struts2的页面默认主题(xhtml风格)为simple,这样就可以根据自己的需要设计页面的布局。在struts.xml中添加如下代码即可。 
<constant name="struts.ui.theme" value="simple"/>
 
4、<s:fielderror name="errormsg" cssStyle="color:red"/>在jsp页面中的这行代码是用来显示服务器端验证错误信息的,name="errormsg" 与java代码 addFieldError(fieldName, errorMessage)方法的参数fieldName对应。addFieldError方法在服务器端设置好错误信息内容,<s:fielderror/>在客户端显示错误提示内容。cssStyle用来设置行内样式,cssClass用以指定css中定义的属性。 
 
5、<s:form action="login.action"> 中action用来指定表单提交给哪个控制器去处理用户的请求。 
 
第四步:开发控制层Action-LoginAction
public class LoginAction extends ActionSupport{
	private String username;	
	private String password;	
	private final String LOGINUSER = "";

	public String execute(){		
		return SUCCESS;		
	}
	
     public void validate(){
    	    if("yanln".equals(username)&& "12345".equals(password)){
    		
			Map usermap = ActionContext.getContext().getSession();			
			usermap.put(LOGINUSER, username);
	    }else{			
			this.addFieldError("errormsg", "用户名或密码错误");
	    }
        }    
        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;
	}	
}

开发Action的方式:

(1)、实现Action接口——接口中有execute方法及5个常量success none error input login

(2)、继承ActionSupport类——可以做数据验证 

(3)、普通的Java类 ——只要有一个返回String类型的无参的公共的execute方法.

注意:实际开发中,Action类通常都继承ActionSupport类,以便简化开发。 

 

下面对LoginAction程序说明一下:

1、LoginAction继承了ActionSupport类,重写validate方法做数据验证,重写execute方法做验证通过后的处理。

 

2、程序首先执行validate方法进行数据验证,如果用户名和密码不满足要求,通过addFieldError("errormsg", "用户名或密码错误");方法设置错误信息内容,在结果跳转时,会找到struts.xml文件中指定input值,来决定跳转到哪个页面。特殊说明:struts2内设数据校验失败时会自动跳转到name为input的<result/> 

<result name="input">index.jsp</result>

 

3、如果用户名和密码满足要求验证通过。我们遇到的项目多数是含有多个页面,项目中多数是要求我们把登录成功的用户名保存到session中去。在struts2中是怎么把它保存到session 中去的呢?
有两种方式能得到session: 
(1)、耦合的访问方式:
Struts2提供了直接访问Servlet Api对象的方式 
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
session.setAttribute(LOGINUSER, username);
 (2)、松耦合的访问方式:
为了避免与Servlet API耦合到一起,方便Action类的测试,Struts框架对Servlet API中的对象进行了封装,构造了对应 Map对象来替代HttpSession. 
Map usermap = ActionContext.getContext().getSession();			
usermap.put(LOGINUSER, username);
 
4、针对于execute方法中返回值,当继承了ActionSupport类或实现了Action接口时,都可以直接使用Action中定义的几个结果常量success none error input login
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
 
public String execute(){		
	  return SUCCESS;		
}
 
第五步:配置Struts 2配置文件(struts.xml)
<struts>
    <package name="example" namespace="/" extends="struts-default">
        <action name="login" class="com.yanln.test.action.LoginAction">
            <result name="success">success.jsp</result>
            <result name="input">index.jsp</result>
        </action>	        
    </package>
</struts>

Struts.xml核心配置文件,主要负责管理Action。通常放在WEB-INF/classes目录下,在该目录下的struts.xml文件可以被自动加载。(也可以放到src根目录下) 

<struts>
  	<constant name="" value=""/>
	<package name="" namespace="" extends="">
		<action name="" class="">
			<result name=""></result>			
		</action>
	</package>
</struts> 

constant元素: 

用于配置常量,可以改变Struts 2框架的一些行为;name属性表示常量名称,value属   性表示常量值 。如: <constant name="struts.ui.theme" value="simple"/>

package元素 :

包的作用:简化维护工作,提高重用性

包可以“继承”已定义的包,并可以添加自己包的配置

name属性为必需的且唯一,用于指定包的名称

extends属性指定要扩展的包 

namespace属性定义该包中action的命名空间 ,为可选属性 

action元素:用来指定业务逻辑处理的Action

result元素:用来配置请求返回的结果页 

注意:除非有令人信服原因,自定义的包应该总是扩展struts-default包,因为该包中配置了大量常用的struts2的特性,没有这些连简单的在action中获取请求数据都无法完成。 

struts-default.xml

Struts 2默认配置文件,会自动加载

struts-default包在struts-default.xml文件中定义

struts-plugin.xml

Struts 2插件使用的配置文件

如果不开发插件,不需要编写该配置文件 

加载顺序  

struts-default.xml—>struts-plugin.xml—>struts.xml 

 

第六步:部署、运行项目 

第一个图标部署项目到tomcat上、第二个图标是启动tomcat

 

 

  • 大小: 95.3 KB
  • 大小: 81.7 KB
  • 大小: 1.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics