一、搭建环境与测试

1、web.xml文件,配置核心Filter

  1: <?xml version="1.0" encoding="UTF-8"?>
  2: <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3:      xmlns="http://java.sun.com/xml/ns/j2ee"
  4:      xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
  5:      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  6:      id="WebApp_9" version="2.4">
  7:   <filter>
  8:     <filter-name>struts2</filter-name>
  9:     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 10:   </filter>
 11:   <filter-mapping>
 12:     <filter-name>struts2</filter-name>
 13:     <url-pattern>/*</url-pattern>
 14:   </filter-mapping>
 15:   <filter>
 16:     <filter-name>struts-cleanup</filter-name>
 17:     <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
 18:   </filter>
 19:   <filter-mapping>
 20:     <filter-name>struts-cleanup</filter-name>
 21:     <url-pattern>/*</url-pattern>
 22:   </filter-mapping>
 23: </web-app>

2、将框架的类库放在WEB-INF/lib路径下

3、用户请求页面

  1: <%@ page language="java" contentType="text/html; charset=UTF-8"
  2:     pageEncoding="UTF-8"%>
  3: <%@ taglib prefix="s" uri="/struts-tags" %>
  4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5: <html>
  6:     <head>
  7:         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8:         <title>login</title>
  9:     </head>
 10:     <body>
 11:         <s:form action="login" align="center">
 12:           <s:textfield name="username" key="user" value="用户名"/>
 13:           <s:textfield name="password" key="pass" value="密    码"/>
 14:           <s:submit value="登录" key="login"/>
 15:         </s:form>
 16:     </body>
 17: </html>

4、实现控制器类

Action就是一个包含execute方法的普通java类。代码如下

LoginAction.java

  1: package cc.openhome;
  2:
  3: import com.opensymphony.xwork2.Action;
  4: import com.opensymphony.xwork2.ActionContext;
  6:
  7: public class LoginAction implements Action {
  8:   private String username;
  9:   private String password;
 10:   public String getUsername() {
 11:     return username;
 12:   }
 13:   public void setUsername(String username) {
 14:     this.username = username;
 15:   }
 16:   public String getPassword() {
 17:     return password;
 18:   }
 19:   public void setPassword(String password) {
 20:     this.password = password;
 21:   }
 22:
 23:   public String execute() throws Exception {
 24:     // TODO Auto-generated method stub
 25:     ActionContext ctx=ActionContext.getContext();
 26:     if(getUsername().equals("nihao") && getPassword().equals("nihao")){
 27:       ctx.getSession().put("user", getUsername());
 28:       return SUCCESS;
 29:     }else{
 30:       return ERROR;
 31:     }
 32:   }
 33: }
 34: 

5、配置Action

修改struts.xml如下:struts.xml

  1: <?xml version="1.0" encoding="UTF-8" ?>
  2: <!DOCTYPE struts PUBLIC
  3:   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4:   "http://struts.apache.org/dtds/struts-2.3.dtd">
  5:
  6: <struts>
  7:     <package name="struts2" extends="struts-default">
  8:     <action name="login" class="cc.openhome.LoginAction">
  9:       <result name="success">/success.jsp</result>
 10:       <result name="error">/error.jsp</result>
 11:     </action>
 12: </struts>

6、success.jsp页面

  1: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2: <%@ taglib prefix="s" uri="/struts-tags" %>
  3: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4: <html>
  5:   <head>
  6:       <title>success</title>
  7:   </head>
  8:   <body>
  9:     <%=request.getAttribute("username")%>:您已经登录!
 10:   </body>
 11: </html>
 12: 

7、error.jsp页面

  1: <%@ page language="java" contentType="text/html; charset=UTF-8"
  2:     pageEncoding="UTF-8"%>
  3: <%@ taglib prefix="s" uri="/struts-tags"%>
  4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5: <html>
  6:   <head>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8:     <title>error</title>
  9:   </head>
 10:   <body>
 11:       <%=request.getAttribute("username")%>:登录失败,请重新登录!
 12:   </body>
 13: </html>

8、运行结果

二、运行机制处理流程

三、定义国际化资源

1、定义两个语言资源文件,并且命名为message_zh_CN.properties和message_en_US.properties

     message_zh_CN.properties

  1: successPage=\u767B\u5F55\u6210\u529F\u9875\u9762
  2: failPage=\u767B\u5F55\u5931\u8D25\u9875\u9762
  3: user=\u7528\u6237\u540D
  4: pass=\u5BC6\u7801
  5: login=\u767B\u5F55
  6: welcome=\u6B22\u8FCE\uFF0C
  7: fail=\u767B\u5F55\u5931\u8D25\uFF0C

     message_en_US.properties

  1: successPage=successPage
  2: failPage=failPage
  3: user=username
  4: pass=password
  5: login=login
  6: welcome=welcome,
  7: fail=fail,

    2、修改success.jsp

    输出国际化信息的方式有两种:

          (1)、<s:text name=”welcome” />

          (2)、<s:property value=”%{getText(“welcome”)}” />

  1: <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
  2: <%@ taglib prefix="s" uri="/struts-tags" %>
  3: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4: <html>
  5:   <head>
  6:       <title><s:text name="successPage"/></title>
  7:   </head>
  8:   <body>
  9:     <%=request.getAttribute("username")%>:<s:text name="welcome"/>
 10:     您已经登录!
 11:   </body>
 12: </html>

    3、修改error.jsp

  1: <%@ page language="java" contentType="text/html; charset=UTF-8"
  2:     pageEncoding="UTF-8"%>
  3: <%@ taglib prefix="s" uri="/struts-tags"%>
  4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5: <html>
  6:   <head>
  7:     <title><s:text name="successPage"/></title>
  8:   </head>
  9:   <body>
 10:       <%=request.getAttribute("username")%>:<s:text name="fail"/>请重新登录!
 11:   </body>
 12: </html>

4、在struts.xml中添加<constant name="struts.custom.i18n.resources" value="message"/>

  1: <?xml version="1.0" encoding="UTF-8" ?>
  2: <!DOCTYPE struts PUBLIC
  3:   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4:   "http://struts.apache.org/dtds/struts-2.3.dtd">
  5:
  6: <struts>
  7:     <constant name="struts.custom.i18n.resources" value="message"/>
  8:     <action name="login" class="cc.openhome.LoginAction">
  9:         <result name="success">/success.jsp</result>
 10:         <result name="error">/error.jsp</result>
 12:     </action>
 13: </struts>

5、运行结果

        

三、增加数据校验

继承ActionSupport类,它是一个工具类,实现了Action接口,还实现了Validateable接口,提供了数据校验功能。在Validateable接口中,定义了一个validate()方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,通过OGNL表达式负责输出。则LoginAction修改后为:

1、LoginAction.java

  1: package cc.openhome;
  2:
  3: import com.opensymphony.xwork2.Action;
  4: import com.opensymphony.xwork2.ActionContext;
  5: import com.opensymphony.xwork2.ActionSupport;
  6:
  7: public class LoginAction extends ActionSupport implements Action {
  8:   private String username;
  9:   private String password;
 10:   public String getUsername() {
 11:     return username;
 12:   }
 13:   public void setUsername(String username) {
 14:     this.username = username;
 15:   }
 16:   public String getPassword() {
 17:     return password;
 18:   }
 19:   public void setPassword(String password) {
 20:     this.password = password;
 21:   }
 22:
 23:   public String execute() throws Exception {
 24:     // TODO Auto-generated method stub
 25:     ActionContext ctx=ActionContext.getContext();
 26:
 27:     if(getUsername().equals("nihao") && getPassword().equals("nihao")){
 28:       ctx.getSession().put("user", getUsername());
 29:       return SUCCESS;
 30:     }else{
 31:       return ERROR;
 32:     }
 33:   }
 34:   public void validate(){
 35:     if(getUsername()!=null || getUsername().trim().equals("")){
 36:       addFieldError("username", "user.required");
 37:     }
 38:     if(getPassword()!=null || getPassword().trim().equals("")){
 39:       addFieldError("password", "pass.required");
 40:     }
 41:   }
 42: }
 43: 

2、修改struts.xml

  1: <?xml version="1.0" encoding="UTF-8" ?>
  2: <!DOCTYPE struts PUBLIC
  3:   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4:   "http://struts.apache.org/dtds/struts-2.3.dtd">
  5:
  6: <struts>
  7:     <constant name="struts.custom.i18n.resources" value="message"/>
  8:     <action name="login" class="cc.openhome.LoginAction">
  9:         <result name="success">/success.jsp</result>
 10:         <result name="error">/error.jsp</result>
 11:         <result name="input">/denglu.jsp</result>
 12:     </action>
 13: </struts>

3、运行结果

     4、校验信息的国际化

(1)、message_zh_CN.properties

  1: successPage=\u767B\u5F55\u6210\u529F\u9875\u9762
  2: failPage=\u767B\u5F55\u5931\u8D25\u9875\u9762
  3: user.required=\u7528\u6237\u540D\u5FC5\u987B\u6B63\u786E\u8F93\u5165
  4: pass.required=\u5BC6\u7801\u5FC5\u987B\u6B63\u786E\u8F93\u5165
  5: user=\u7528\u6237\u540D
  6: pass=\u5BC6\u7801
  7: login=\u767B\u5F55
  8: welcome=\u6B22\u8FCE\uFF0C
  9: fail=\u767B\u5F55\u5931\u8D25\uFF0C

    (2)、message_en_US.properties

  1: successPage=successPage
  2: user.required=user.required
  3: pass.required=pass.required
  4: failPage=failPage
  5: user=username
  6: pass=password
  7: login=login
  8: welcome=welcome,
  9: fail=fail, 

(3)、修改validate()方法

  1: public void validate(){
  2:     if(getUsername()!=null || getUsername().trim().equals("")){
  3:       addFieldError("username", getText("user.required"));
  4:     }
  5:     if(getPassword()!=null || getPassword().trim().equals("")){
  6:       addFieldError("password", getText("pass.required"));
  7:     }
  8:   }

(4)、运行结果

5、使用Struts2的校验框架

如果不需要写大量代码,可以用基于XWork的validator框架,新建一个校验规则文件即可。把文件命名为: LoginAction-validation.xml

LoginAction-validation.xml

  1: <?xml version="1.0" encoding="UTF-8"?>
  2: <!DOCTYPE validators PUBLIC
  3:   "-//Apache Struts//XWork Validator 1.0//EN"
  4:   "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
  5: <validators>
  6:   <field name="username">
  7:     <field-validator type="requiredstring">
  8:       <message key="user.required"/>
  9:     </field-validator>
 10:   </field>
 11:   <field name="password">
 12:     <field-validator type="requiredstring">
 13:       <message key="pass.required"/>
 14:     </field-validator>
 15:   </field>
 16: </validators>

Struts2的一个入门实例----登录功能的更多相关文章

  1. Struts2整合Hibernate3实现用户登录功能

    所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...

  2. SSH入门开发(实现一个简单的登录功能)详解

    开头,首先想记录下一首诗,是今天拇指阅读看到的:很有感触,所以乐于分享: 那么,下面正式开始进入正题,搭建一个 SSH完整的项目: 首先,我们需要在WEB-ROOT下创建一个login.jsp(登录) ...

  3. Android+struts2+json方式模拟手机登录功能

    涉及到的知识点: 1.Struts2框架的搭建(包括Struts2的jSON插件) 2.Android前台访问Web采用HttpClient方式. 3.Android采用JSON的解析. 服务端主要包 ...

  4. Struts2自定义拦截器实例—登陆权限验证

    版本:struts2.1.6 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. ...

  5. EF6CodeFirst+MVC5+Autofac泛型注册 入门实例

    贴一个EF6 CodeFirst模式结合MVC5和Autofac(泛型注册)的一个入门实例 网上类似的例子实在太少,最近自己也有用到这一块的知识,总结了一下,不要让后人踩了自己踩过的坑. 1:新建三个 ...

  6. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)

    由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教. 一 ...

  7. mybatis 详解(二)------入门实例(基于XML)

    通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...

  8. C#实现登录功能(连接SQLServer数据库)

    本例使用C#实现一个简单的登录功能,分为用户和管理员两个角色登录. 效果图: 核心代码 login.cs private void button1_Click(object sender, Event ...

  9. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之登录功能

    昨天的博客中我分享了个人关于ssh实现员工管理的框架整合,今天我在分享管理员登录功能的实现.  转载请注明出处"http://www.cnblogs.com/smfx1314/p/78013 ...

随机推荐

  1. Qt5:QSystemTrayIcon类实现程序托盘图标

    windows下,在许多应用程序中都会实现一个托盘图标,用于隐藏应用程序窗口时还能对该应用程序进行简单的操作,例如 QQ ,renren等程序 那么,在Qt中,如何实现呢? 这就要用到Qt提供的 QS ...

  2. 怎样把人物处理的清晰PS教程

    首先打开PS软件,导入一张人物图片 然后复制图层,点滤镜---杂色----减少杂色 点高级 点确定. 点图像-----调整-----匹配颜色在点一下中和,中和看图效果,也可点 也可不点 切记,然后确定 ...

  3. thinkphp5.0入口文件

    入口文件 ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口. 应该说,所有应用都是从入口文件开始的,并且不同应用的入口文件是类似的. ...

  4. mysql优化---优化工具MySQL performance tuning primer script

    MySQL performance tuning primer script一个简单好用的mysql优化工具,其实一个shell脚本 下载: $ wget http://www.day32.com/M ...

  5. Android Studio的使用(三)--包不分级、修改包名

    1.如果不喜欢将包逐级展开的话,可以将每一个包名都完整展现出来,只需要勾选Flatten Packages. 2.修改包名 3.填写新的包名 4.点击确认

  6. MC34063中文资料及应用实例(转)

    源:http://blog.chinaunix.net/uid-26199686-id-3207838.html MC34063A(MC33063)芯片器件简介 该器件本身包含了DC/DC变换器所需要 ...

  7. Bundle versions string, short与Bundle version

    在提交更新的app至appstore中时,需要在**.plist中设置app的version信息.Bundle versions string, short --- CFBundleShortVers ...

  8. CodeForces 609D Gadgets for dollars and pounds

    二分天数+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...

  9. ASP.NET MVC 5 WEB API 用户验证

    参考博客:ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1) 参考博客:MVC WebApi 用户验证 (2)构建ASP.NET MVC5+E ...

  10. 密钥public/private key登陆linux

    Public Key认证是什么这是一种认证方法,类似于常见的用户名密码认证方法.不同的是需要在客户端机器上保留一个很长很长的加密key,而在服务器端需要做出相应的配置.当客户端想要访问服务器时,服务器 ...