Struts2实现登陆功能Demo

最近在学习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内容如下:




    
    
        
            /WEB-INF/success.jsp
            /WEB-INF/login.jsp
        
    

主要属性说明:

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包,因为struts2很多核心功能都是拦截来实现的。如从请求中把请求参数封闭到action、文件上传和数据验证等都是通过拦截器实现的。

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元素主要定义视图的跳转和返回的行为及类型。

常用开关的介绍
指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法

该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。    如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。   

设置浏览器是否缓存静态内容,默认值为true,开发阶段最好false

当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段最好true

开发模式下设为true,这样可以打印出更详细的错误信息

动态方法调用,可以解决多个请求对应一个Servlet的问题,后面详细讲解,默认为true,关闭则设为false.


3、在web.xml中加入struts2 MVC框架启动配置

web.xml内容如下:




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

	
		struts2
		/*
	

	
		/WEB-INF/index.jsp
	
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" %>




Insert title here



    
    
    
    



success.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>




Insert title here


欢迎

6、经过上述步骤,登录实例已经编写完毕。运行效果如下图:

登陆界面:在访问的时候加了action后缀,我这里不加就访问不了。照说应该是不加也行的。

Struts2实现登陆功能Demo_第1张图片

登陆成功界面:

Struts2实现登陆功能Demo_第2张图片

7、总结:对struts2进行了入门学习,尤其仔细看了struts配置的相关资料。学习struts是掌握SSH的第一步。千里之行,始于足下嘛。


你可能感兴趣的:(Java,Web,Java,Web入门)