zoukankan      html  css  js  c++  java
  • 基于用户登陆的struts2中action的分类详解

    在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式。


    1、继承 ActionSupport 实现 Action

    通过继承 ActionSupport 来实现 Action 是我们的推荐做法,因为 ActionSupport 中提供了输入验证、国际化、execute 等常用方法,使得编写 Action 时代码很简单。

    1.1 UserAction.java

    package com.lzugis.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport 
    {
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	private String username;
    	private String userpass;
    	public String getUsername() 
    	{
    		return username;
    	}
    	public void setUsername(String username) 
    	{
    		this.username = username;
    	}
    	public String getUserpass() 
    	{
    		return userpass;
    	}
    	public void setUserpass(String userpass) 
    	{
    		this.userpass = userpass;
    	}
    	
    	@Override
    	public String execute() throws Exception 
    	{
    		if (username.equals("admin") && userpass.equals("admin"))
    		{
    			return "success";		
    		}
    		else
    		{
    			return "error";
    		}
    	}
    }

    1.2 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>
    	<!--  定义包管理配置的action  继承struts-default.xml中的配置  -->
    	<package name="action" extends="struts-default">
    		<!--  定义Action(login.action)  -->
    		<action name="login" class="com.lzugis.action.UserAction">
    			<!--  定义转发路径对应的字符串名  -->
    			<result name="success">/Success.jsp</result>
    			<result name="error">/Error.jsp</result>
    		</action> 
    	</package>
    </struts>

    1.3 userlogin.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
        
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!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>用户登录</title>
    </head>
    <body style="font-family:Times New Roman">
    	<form action="login.action" method="post">
    		用户名:
    		<!--  参数名和action中的属性名一样  -->
    		<input type="text" name="username"><br>
    		密  码:	
    		<input type="password" name="userpass">
    		<br>
    		<input type="submit" name="subm" value="提交">
    		<input type="reset" name="reset" value="取消">
    	</form>
    </body>
    </html>

    1.4 action响应结果

    1.4.1 Success.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    
    <%@ taglib uri="/struts-tags" prefix="s"%>
    
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!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>登录成功</title>
    </head>
    <body>
    	<h1>欢迎<s:property value="username" />,登录</h1>	
    </body>
    </html>

    1.4.2  Error.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!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>登陆错误</title>
    </head>
    <body>
    	<h1>用户名或者密码错误</h1>
    </body>
    </html>


    2、模型驱动(ModelDriven)的 Action

    Struts2 的 Action 属于 MVC 模型层, Action 中的方法代表业务逻辑, Action 中的属性代表请求中的参数,当页面请求参数较多的时候,把过多的参数对象的属性定义在 Action 中不太符合 Struts 所倡导的松耦合原则,所以我们推荐单独用 JavaBean 来封装参数,在 Action中为 JavaBean 赋值,这就是 ModelDriven 的 Action。模型驱动的 Action 要求 Action 实现ModelDriven 接口,假如登录页面需要传输参数 username 和 userpass,我们把这 2 个参数封装在一个数据的 JavaBean 中,然后在 Action 中定义该 JavaBean 为 Model 即可。

    2.1 UserInfo.java

    package com.lzugis.javabean;
    
    public class UserInfo 
    {
    	private String username,userpass;
    	public String getUsername()
    	{
    		return username;
    	}
    	public void setUsername(String username)
    	{
    		this.username=username;
    	}
    	public String getUserpass()
    	{
    		return userpass;
    	}
    	public void setUserpass(String userpass)
    	{
    		this.userpass=userpass;
    	}
    }

    2.2 UserinfoAction.java

    package com.lzugis.action;
    
    import com.lzugis.javabean.UserInfo;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class UserinfoAction extends ActionSupport  implements  ModelDriven<UserInfo>
    {
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	private UserInfo model;
    	@Override
    	public UserInfo getModel() 
    	{
    		 if(model == null)
    		 {
    			 model = new UserInfo();	       
    		 }
    		 return model;
    	}
    	
    	@Override
    	public String execute() throws Exception 
    	{
    		if (model.getUsername().equals("admin") && model.getUserpass().equals("admin"))
    		{
    			return "success";		
    		}
    		else
    		{
    			return "error";
    		}
    	}	
    }

    2.3 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>
    	<!--  定义包管理配置的action  继承struts-default.xml中的配置  -->
    	<package name="action" extends="struts-default">
    		<!--  定义Action(user.action)  -->
    		<action name="user" class="com.lzugis.action.UserinfoAction">
    			<!--  定义转发路径对应的字符串名  -->
    			<result name="success">/Success.jsp</result>
    			<result name="error">/Error.jsp</result>
    		</action> 
    	</package>
    </struts>

    2.4 user.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
        
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!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>用户登录</title>
    </head>
    <body style="font-family:Times New Roman">
    	<form action="user.action" method="post">
    		用户名:
    		<!--  参数名和action中的属性名一样  -->
    		<input type="text" name="model.username"><br>
    		密  码:	
    		<input type="password" name="model.userpass">
    		<br>
    		<input type="submit" name="subm" value="提交">
    		<input type="reset" name="reset" value="取消">
    	</form>
    </body>
    </html>

    2.5 action结果

    与1相同,在此不在赘述。

    本实例通过struts中action的两种不同方式,实现了用户登陆的验证。相比较继承ActionSupport实现action,模型驱动的action比较方便。继承ActionSupport实现action,如果实体类的属性非常多,那么Action中也要定义相同的属性,这样显得比较繁琐。

    例子源码:http://download.csdn.net/detail/gisshixisheng/6921547

  • 相关阅读:
    Vue购物车项目
    总结前端面试过程中最容易出现的问题
    Node.js
    浏览器前端优化
    计算机课程
    谈谈对前端的理解
    MySQL
    阿里云Centos+Django+Nginx+uWSGI
    Windows + Apache + WSGI 部署Django
    Django积木块11 —— 缓存
  • 原文地址:https://www.cnblogs.com/lzugis/p/6539912.html
Copyright © 2011-2022 走看看