目标:登录验证,登录成功转向成功页面,可以进行用户添加操作,登录失败转向失败页面,未登录就输入添加用用户的连接则非法,强制跳转到登陆页面
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可以登陆,可以添加用户
相关推荐
本示例将深入解析"struts简单的入门登录例子",帮助初学者理解Struts的基本结构和工作原理。 首先,Struts框架的核心是ActionServlet,它是Servlet的一种扩展,负责接收HTTP请求,根据配置信息决定调用哪个Action来...
在这个入门例子中,你可以创建一个简单的表单,使用Struts1.x的Validator框架进行验证。首先创建表单HTML页面,然后编写对应的ValidatorForm和Action,最后配置struts-config.xml和ValidatorRule.xml。运行项目,...
3. **Interceptor(拦截器)**:Struts2的拦截器机制允许在Action执行前后执行额外的逻辑,如日志、权限验证等。这些可以在struts.xml中配置。 4. **Result类型**:Action执行后的结果会被映射到一个Result,可以是...
这个“struts2入门级的例子”是一个非常适合初学者的资源,它将引导你了解Struts2的基础知识和核心概念。通过实践这些例子,你可以快速掌握Struts2的使用方法,从而提高你的Web开发技能。 1. **配置环境**: 首先,...
本教程将通过一个管理员登录验证的例子,帮助初学者快速掌握Struts2的基本概念和用法。 首先,让我们了解一下Struts2的核心组件和工作原理。Struts2框架通过拦截器(Interceptor)机制处理HTTP请求,这些拦截器可以...
这个入门级例子旨在帮助新手了解如何在实际项目中应用Struts1.3的核心概念和技术。在这个例子中,我们将深入探讨以下几个关键知识点: 1. **Action**: 在Struts1.3中,Action类是处理用户请求的核心组件。当用户...
这个“struts2简单例子”是初学者理解Struts2工作原理和核心概念的一个很好的起点。让我们深入探讨一下Struts2的基础知识。 1. **MVC架构**: MVC模式是软件设计中的一个经典模式,它将应用逻辑分为三个主要部分:...
这个“struts入门简单例子”旨在为初学者提供一个基础的 Struts 应用示例,帮助理解 Struts 的核心概念和工作流程。 1. **MVC设计模式**:Struts 是基于 Model-View-Controller (MVC) 设计模式的,它将应用的业务...
这个入门例子旨在帮助初学者理解和掌握Struts2的基础用法,包括国际化、验证和拦截器等关键功能。 首先,让我们详细了解一下Struts2的核心概念: 1. **MVC模式**:MVC模式是软件工程中的一种设计模式,将业务逻辑...
10. ** strut2-helloworld 示例**:这个例子通常包含一个简单的Action类(如HelloWorldAction),一个显示“Hello, World!”的JSP页面,以及相应的配置文件。它展示了最基本的Struts2应用搭建流程,是初学者入门的好...
通过这个入门例子,你可以逐步了解Struts2的运行机制,包括请求处理、数据绑定、视图渲染等核心概念。同时,你还可以了解到如何结合Struts2与其他技术,如数据库连接、安全性控制等,来构建更复杂的Java Web应用。...
在这个入门例子中,我们将探讨如何设置Struts2环境,配置`web.xml`,创建Action类以及理解Struts2的工作流程。 首先,我们需要一个开发环境,这里使用的是JDK1.6、Myeclipse 6.6和Tomcat6.0。为了使用Struts2,你...
这个"Struts2入门例子"是一个很好的起点,旨在帮助初学者快速理解并掌握Struts2的核心概念和使用方法。 在Struts2框架中,模型(Model)负责业务逻辑,视图(View)处理用户界面,控制器(Controller)则是这两者...
通过这个简单的入门案例,你可以学习到如何创建Action、编写配置文件、设计交互页面,并理解Struts2框架如何将所有这些组件协同工作。对于想要深入学习Struts2的人来说,这是一个很好的起点,可以帮助他们快速掌握...
本入门例子将带你逐步了解如何使用Struts2.0来创建一个简单的Web应用。 一、Struts2.0框架基础 Struts2.0是Struts1.x的升级版,它吸取了WebWork框架的优点,提供更强大的功能和更好的灵活性。核心特性包括Action、...
【JSP+Struts2 注册登录入门 demo】是一个典型的Web应用开发实例,它结合了Java Server Pages(JSP)和Struts2框架,用于实现用户注册和登录功能。Struts2是一个强大的MVC(Model-View-Controller)框架,它简化了...
在这个“struts入门的例子”中,我们可以看到一系列的文件,它们共同构成了一个简单的Struts应用。 1. **文件解析:** - `zhucecg.jsp` 和 `zhucesb.jsp` 可能是用户注册和登录的界面,分别用于收集用户的注册信息...
在这个入门登录例子中,初学者将学习如何整合这两个技术,创建一个简单的登录系统。以下是一些关键知识点: 1. **Struts1框架**: - **Action类**:是Struts1的核心,处理HTTP请求,执行业务逻辑,并返回相应的...
本入门小例子将帮助初学者理解 Struts 的基本概念和工作流程。 首先,"struts13_05" 这个文件名可能指的是 Struts 1.3.5 版本的一个示例项目。Struts 1.3 是 Struts 1 系列的一个稳定版本,包含了丰富的功能和改进...
### Struts经典入门案例解析 #### 一、Struts简介 Apache Struts 是一个开源的MVC(Model-View-Controller)框架,用于简化Java Web应用程序的开发过程。它通过提供一套现成的架构和组件来帮助开发者快速构建可...