`
ningbingjian
  • 浏览: 9485 次
社区版块
存档分类
最新评论

01_struts简单的登录验证入门例子

 
阅读更多

    目标:登录验证,登录成功转向成功页面,可以进行用户添加操作,登录失败转向失败页面,未登录就输入添加用用户的连接则非法,强制跳转到登陆页面 

 

   1 . 首先添加struts2 jar

  

    commons-fileupload-1.2.1.jar

  

    commons-io-1.3.2.jar

 

    freemarker-2.3.16.jar

 

    javassist-3.7.ga.jar

 

   ognl-3.0.jar

 

   struts2-core-2.2.1.jar

 

   xwork-core-2.2.1.jar

 

  2 . 配置strtus的拦截器,在web.xml配置

 

  

<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>

 

  

   3.  编写登陆验证的Ation ,LoginAction.java

 

   

//实现modelDriven接口
public class LoginAction implements ModelDriven{
    
	private User user ;
	
	@Override
	public Object getModel() {
		if(user == null){
			user = new User();
		}
		return user ;
	}
    
	//账号密码判断
	public String  login(){
		
		//账号密码正确进入成功页面
		if("admin".equals(user.getUsername()) && "admin".equals(user.getPassword())){
			
			//把user放到session
			ActionContext.getContext().getSession().put("Login", user);
			
			return "success" ;
		}
		
		//否则进入失败页面
		return "fail";
	}
}

 

 

    4 . 编写模拟用户添加的action

     

       

public class UserAction {
    
	public String add(){
		
		return "add";
	}
}

 

  

  5 . 编写判断是否登陆的拦截器

 

  

//实现Interceptor接口
public class LoginInterceptor implements Interceptor{

	@Override
	public void destroy() {
		
		
	}

	@Override
	public void init() {
		
		
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
		//如果从session取不到值的话,表示用户未登录,转到登陆页面
		if(invocation.getInvocationContext().getSession().get("Login")==null){
			
			return "index";
		}
		
		//继续往下执行
		return invocation.invoke();
	}

}

 

 

    6 . 配置struts.xml文件,分三部分贴

 

     (1) 配置登陆拦截器和默认使用的拦截器

 

 

<!-- 一系列的拦截器 -->
      <interceptors>
      
      	<!-- 登陆用到的拦截器 -->
      	<interceptor name="logininterceptor"
      		class="cn.com.action.LoginInterceptor">
      	</interceptor>
      	
      	<!-- 拦截栈 -->
      	<interceptor-stack name="needLoginStack">
      	
      		<interceptor-ref name="exception" />
      		
      		<interceptor-ref name="logininterceptor" />
      		
      		<interceptor-ref name="alias" />
      		
      		<interceptor-ref name="servletConfig" />
      		
      		<interceptor-ref name="i18n" />
      		
      		<interceptor-ref name="prepare" />
      		
      		<interceptor-ref name="chain" />
      		
      		<interceptor-ref name="debugging" />
      		
      		<interceptor-ref name="scopedModelDriven" />
      		
      		<interceptor-ref name="modelDriven">
      		
      			<param name="refreshModelBeforeResult">true</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="fileUpload" />
      		
      		<interceptor-ref name="checkbox" />
      		
      		<interceptor-ref name="multiselect" />
      		
      		<interceptor-ref name="staticParams" />
      		
      		<interceptor-ref name="actionMappingParams" />
      		
      		<interceptor-ref name="params">
      		
      			<param name="excludeParams">
      				dojo\..*,^struts\..*
      			</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="conversionError" />
      		
      		<interceptor-ref name="validation">
      		
      			<param name="excludeMethods">
      				input,back,cancel,browse
      			</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="workflow">
      		
      			<param name="excludeMethods">
      				input,back,cancel,browse
      			</param>
      			
      		</interceptor-ref>
      		
      	</interceptor-stack>

      	<!-- The completeStack is here for backwards compatibility for
      		applications that still refer to the defaultStack by the
      		old name -->
      	<interceptor-stack name="completeStack">
      	
      		<interceptor-ref name="defaultStack" />
      		
      	</interceptor-stack>

      	<!-- Sample execute and wait stack.
      		Note: execAndWait should always be the *last* interceptor. -->
      	<interceptor-stack name="executeAndWaitStack">
      	
      		<interceptor-ref name="execAndWait">
      		
      			<param name="excludeMethods">input,back,cancel</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="defaultStack" />
      		
      		<interceptor-ref name="execAndWait">
      		
      			<param name="excludeMethods">input,back,cancel</param>
      			
      		</interceptor-ref>

      	</interceptor-stack>

      	<!--  未配置登陆验证的拦截栈 -->
      	<interceptor-stack name="otherStack">
      	
      		<interceptor-ref name="exception" />

      		<interceptor-ref name="alias" />
      		
      		<interceptor-ref name="servletConfig" />
      		
      		<interceptor-ref name="i18n" />
      		
      		<interceptor-ref name="prepare" />
      		
      		<interceptor-ref name="chain" />
      		
      		<interceptor-ref name="debugging" />
      		
      		<interceptor-ref name="scopedModelDriven" />
      		
      		<interceptor-ref name="modelDriven">
      		
      			<param name="refreshModelBeforeResult">true</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="fileUpload" />
      		
      		<interceptor-ref name="checkbox" />
      		
      		<interceptor-ref name="multiselect" />
      		
      		<interceptor-ref name="staticParams" />
      		
      		<interceptor-ref name="actionMappingParams" />
      		
      		<interceptor-ref name="params">
      		
      			<param name="excludeParams">
      				dojo\..*,^struts\..*
      			</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="conversionError" />
      		
      		<interceptor-ref name="validation">
      		
      			<param name="excludeMethods">
      				input,back,cancel,browse
      			</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="workflow">
      		
      			<param name="excludeMethods">
      				input,back,cancel,browse
      			</param>
      			
      		</interceptor-ref>
      		
      	</interceptor-stack>

      </interceptors>
      

    2 . 配置默认使用登陆拦截器

 

 

        <default-interceptor-ref name="needLoginStack"></default-interceptor-ref>
	   
	   <global-results>
	   
	      <result name="index">/index.jsp</result>
	      
	   </global-results>

 

 

 

3 .    配置LoginAction 和UserAction

 

  

<action name="login" class="cn.com.action.LoginAction">
	   
	       <result name="success">/success.jsp</result>
	       
	       <result name="fail">/fail.jsp</result>
	       
	       <!-- 很明显,登陆判断的Action并不需要判断是否登陆 -->
           <interceptor-ref name="otherStack"></interceptor-ref>
           
	   </action>
	   
	   <action name="user" class="cn.com.action.UserAction">
	     
	       <result name="add">/addSuccess.jsp</result>
	       
	       <!-- 除了登陆判断的Action,其他所有的Action都需要判断是否已经登陆,登陆方能操作 -->
	       <interceptor-ref name="needLoginStack"></interceptor-ref>
	       
	   </action>

      

 

    4 . 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>
    
      <package name="system" namespace="/system" extends="struts-default">

      <!-- 一系列的拦截器 -->
      <interceptors>
      
      	<!-- 登陆用到的拦截器 -->
      	<interceptor name="logininterceptor"
      		class="cn.com.action.LoginInterceptor">
      	</interceptor>
      	
      	<!-- 拦截栈 -->
      	<interceptor-stack name="needLoginStack">
      	
      		<interceptor-ref name="exception" />
      		
      		<interceptor-ref name="logininterceptor" />
      		
      		<interceptor-ref name="alias" />
      		
      		<interceptor-ref name="servletConfig" />
      		
      		<interceptor-ref name="i18n" />
      		
      		<interceptor-ref name="prepare" />
      		
      		<interceptor-ref name="chain" />
      		
      		<interceptor-ref name="debugging" />
      		
      		<interceptor-ref name="scopedModelDriven" />
      		
      		<interceptor-ref name="modelDriven">
      		
      			<param name="refreshModelBeforeResult">true</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="fileUpload" />
      		
      		<interceptor-ref name="checkbox" />
      		
      		<interceptor-ref name="multiselect" />
      		
      		<interceptor-ref name="staticParams" />
      		
      		<interceptor-ref name="actionMappingParams" />
      		
      		<interceptor-ref name="params">
      		
      			<param name="excludeParams">
      				dojo\..*,^struts\..*
      			</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="conversionError" />
      		
      		<interceptor-ref name="validation">
      		
      			<param name="excludeMethods">
      				input,back,cancel,browse
      			</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="workflow">
      		
      			<param name="excludeMethods">
      				input,back,cancel,browse
      			</param>
      			
      		</interceptor-ref>
      		
      	</interceptor-stack>

      	<!-- The completeStack is here for backwards compatibility for
      		applications that still refer to the defaultStack by the
      		old name -->
      	<interceptor-stack name="completeStack">
      	
      		<interceptor-ref name="defaultStack" />
      		
      	</interceptor-stack>

      	<!-- Sample execute and wait stack.
      		Note: execAndWait should always be the *last* interceptor. -->
      	<interceptor-stack name="executeAndWaitStack">
      	
      		<interceptor-ref name="execAndWait">
      		
      			<param name="excludeMethods">input,back,cancel</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="defaultStack" />
      		
      		<interceptor-ref name="execAndWait">
      		
      			<param name="excludeMethods">input,back,cancel</param>
      			
      		</interceptor-ref>

      	</interceptor-stack>

      	<!--  未配置登陆验证的拦截栈 -->
      	<interceptor-stack name="otherStack">
      	
      		<interceptor-ref name="exception" />

      		<interceptor-ref name="alias" />
      		
      		<interceptor-ref name="servletConfig" />
      		
      		<interceptor-ref name="i18n" />
      		
      		<interceptor-ref name="prepare" />
      		
      		<interceptor-ref name="chain" />
      		
      		<interceptor-ref name="debugging" />
      		
      		<interceptor-ref name="scopedModelDriven" />
      		
      		<interceptor-ref name="modelDriven">
      		
      			<param name="refreshModelBeforeResult">true</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="fileUpload" />
      		
      		<interceptor-ref name="checkbox" />
      		
      		<interceptor-ref name="multiselect" />
      		
      		<interceptor-ref name="staticParams" />
      		
      		<interceptor-ref name="actionMappingParams" />
      		
      		<interceptor-ref name="params">
      		
      			<param name="excludeParams">
      				dojo\..*,^struts\..*
      			</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="conversionError" />
      		
      		<interceptor-ref name="validation">
      		
      			<param name="excludeMethods">
      				input,back,cancel,browse
      			</param>
      			
      		</interceptor-ref>
      		
      		<interceptor-ref name="workflow">
      		
      			<param name="excludeMethods">
      				input,back,cancel,browse
      			</param>
      			
      		</interceptor-ref>
      		
      	</interceptor-stack>

      </interceptors>
      
      	   
	   
	   <default-interceptor-ref name="needLoginStack"></default-interceptor-ref>
	   
	   <global-results>
	   
	      <result name="index">/index.jsp</result>
	      
	   </global-results>

      <action name="login" class="cn.com.action.LoginAction">
	   
	       <result name="success">/success.jsp</result>
	       
	       <result name="fail">/fail.jsp</result>
	       
	       <!-- 很明显,登陆判断的Action并不需要判断是否登陆 -->
           <interceptor-ref name="otherStack"></interceptor-ref>
           
	   </action>
	   
	   <action name="user" class="cn.com.action.UserAction">
	     
	       <result name="add">/addSuccess.jsp</result>
	       
	       <!-- 除了登陆判断的Action,其他所有的Action都需要判断是否已经登陆,登陆方能操作 -->
	       <interceptor-ref name="needLoginStack"></interceptor-ref>
	       
	   </action>

      </package>
    </struts>

  

 6 .编写四个页面

     (1)登陆页面index.jsp

 

    

      <form action="system/login!login.action" method="post">
      
            用户名:<input type="text" name="username"><br>
           
            密码: <input type="password" name="password"><br>
           
           <input type="submit" value="登陆">
      
      </form>

 

(2) 登陆失败和成功页面

 

   success.jsp

      <h1> 登陆成功</h1><br>
       
       <h1><a href="system/user!add.action"> 添加用户</a></h1><br>

  fail.jsp

 

  

    <center>
       <h1>登陆失败</h1><br>
       
    </center>

   (3) 添加用户成功页面 addSuccess.jsp

 

  

    <center>
       <h1>添加一个用户成功</h1>
    </center>

 

 

   最后,启动服务器测试

 

    输入用户名和密码admin可以登陆,可以添加用户

分享到:
评论
1 楼 zsf0615020117 2011-07-13  
不错的文章 谢谢分享

相关推荐

    struts简单的入门登录例子

    本示例将深入解析"struts简单的入门登录例子",帮助初学者理解Struts的基本结构和工作原理。 首先,Struts框架的核心是ActionServlet,它是Servlet的一种扩展,负责接收HTTP请求,根据配置信息决定调用哪个Action来...

    struts1.x validator框架验证入门例子

    在这个入门例子中,你可以创建一个简单的表单,使用Struts1.x的Validator框架进行验证。首先创建表单HTML页面,然后编写对应的ValidatorForm和Action,最后配置struts-config.xml和ValidatorRule.xml。运行项目,...

    MyEclipse.6.实战开发讲解视频入门_源代码\13_struts2hello.zip

    3. **Interceptor(拦截器)**:Struts2的拦截器机制允许在Action执行前后执行额外的逻辑,如日志、权限验证等。这些可以在struts.xml中配置。 4. **Result类型**:Action执行后的结果会被映射到一个Result,可以是...

    struts2入门级的例子

    这个“struts2入门级的例子”是一个非常适合初学者的资源,它将引导你了解Struts2的基础知识和核心概念。通过实践这些例子,你可以快速掌握Struts2的使用方法,从而提高你的Web开发技能。 1. **配置环境**: 首先,...

    Struts2入门(管理员登录验证例子)

    本教程将通过一个管理员登录验证的例子,帮助初学者快速掌握Struts2的基本概念和用法。 首先,让我们了解一下Struts2的核心组件和工作原理。Struts2框架通过拦截器(Interceptor)机制处理HTTP请求,这些拦截器可以...

    struts1.3 入门级例子

    这个入门级例子旨在帮助新手了解如何在实际项目中应用Struts1.3的核心概念和技术。在这个例子中,我们将深入探讨以下几个关键知识点: 1. **Action**: 在Struts1.3中,Action类是处理用户请求的核心组件。当用户...

    struts2简单例子

    这个“struts2简单例子”是初学者理解Struts2工作原理和核心概念的一个很好的起点。让我们深入探讨一下Struts2的基础知识。 1. **MVC架构**: MVC模式是软件设计中的一个经典模式,它将应用逻辑分为三个主要部分:...

    struts入门简单例子

    这个“struts入门简单例子”旨在为初学者提供一个基础的 Struts 应用示例,帮助理解 Struts 的核心概念和工作流程。 1. **MVC设计模式**:Struts 是基于 Model-View-Controller (MVC) 设计模式的,它将应用的业务...

    struts2.1.8 入门例子

    这个入门例子旨在帮助初学者理解和掌握Struts2的基础用法,包括国际化、验证和拦截器等关键功能。 首先,让我们详细了解一下Struts2的核心概念: 1. **MVC模式**:MVC模式是软件工程中的一种设计模式,将业务逻辑...

    struts2完整例子

    10. ** strut2-helloworld 示例**:这个例子通常包含一个简单的Action类(如HelloWorldAction),一个显示“Hello, World!”的JSP页面,以及相应的配置文件。它展示了最基本的Struts2应用搭建流程,是初学者入门的好...

    struts2入门经典例子

    通过这个入门例子,你可以逐步了解Struts2的运行机制,包括请求处理、数据绑定、视图渲染等核心概念。同时,你还可以了解到如何结合Struts2与其他技术,如数据库连接、安全性控制等,来构建更复杂的Java Web应用。...

    struts2入门例子

    在这个入门例子中,我们将探讨如何设置Struts2环境,配置`web.xml`,创建Action类以及理解Struts2的工作流程。 首先,我们需要一个开发环境,这里使用的是JDK1.6、Myeclipse 6.6和Tomcat6.0。为了使用Struts2,你...

    Struts2入门例子

    这个"Struts2入门例子"是一个很好的起点,旨在帮助初学者快速理解并掌握Struts2的核心概念和使用方法。 在Struts2框架中,模型(Model)负责业务逻辑,视图(View)处理用户界面,控制器(Controller)则是这两者...

    struts2入门demo

    通过这个简单的入门案例,你可以学习到如何创建Action、编写配置文件、设计交互页面,并理解Struts2框架如何将所有这些组件协同工作。对于想要深入学习Struts2的人来说,这是一个很好的起点,可以帮助他们快速掌握...

    struts2.0的入门例子

    本入门例子将带你逐步了解如何使用Struts2.0来创建一个简单的Web应用。 一、Struts2.0框架基础 Struts2.0是Struts1.x的升级版,它吸取了WebWork框架的优点,提供更强大的功能和更好的灵活性。核心特性包括Action、...

    jsp+Struts2 注册 登录 入门demo

    【JSP+Struts2 注册登录入门 demo】是一个典型的Web应用开发实例,它结合了Java Server Pages(JSP)和Struts2框架,用于实现用户注册和登录功能。Struts2是一个强大的MVC(Model-View-Controller)框架,它简化了...

    struts入门的例子

    在这个“struts入门的例子”中,我们可以看到一系列的文件,它们共同构成了一个简单的Struts应用。 1. **文件解析:** - `zhucecg.jsp` 和 `zhucesb.jsp` 可能是用户注册和登录的界面,分别用于收集用户的注册信息...

    struts1+mysql的入门登陆例子

    在这个入门登录例子中,初学者将学习如何整合这两个技术,创建一个简单的登录系统。以下是一些关键知识点: 1. **Struts1框架**: - **Action类**:是Struts1的核心,处理HTTP请求,执行业务逻辑,并返回相应的...

    struts入门小例子

    本入门小例子将帮助初学者理解 Struts 的基本概念和工作流程。 首先,"struts13_05" 这个文件名可能指的是 Struts 1.3.5 版本的一个示例项目。Struts 1.3 是 Struts 1 系列的一个稳定版本,包含了丰富的功能和改进...

    struts经典入门例子

    ### Struts经典入门案例解析 #### 一、Struts简介 Apache Struts 是一个开源的MVC(Model-View-Controller)框架,用于简化Java Web应用程序的开发过程。它通过提供一套现成的架构和组件来帮助开发者快速构建可...

Global site tag (gtag.js) - Google Analytics