一、搭建环境与测试

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. Android Paint画笔及Color .

    引自:http://blog.csdn.net/q445697127/article/details/7736926 Paint paint = new Paint(); // 设置paint为无锯齿 ...

  2. 程序员 10Tips

    理解技术债务 技术债务就像信用卡一样,会有很高的利息率,时间越长,修复所花的代价就越大,程序员对这个要有深刻的认识.同时团队应该培养一种保证设计质量的文化,应当鼓励重构.同时也应当鼓励其它有关代码质量 ...

  3. phpstorm9如何配置interpreter

    找到php.exe的路径. 把php.exe 放进去就ok了

  4. Android5.1图库Gallery2代码分析数据加载流程

    图片数据加载流程. Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->Photo ...

  5. 高效PHP编程

    1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍.   当然了,这个测试方法需要在十万级以上次执行,效果才明显.   其实静态方法和非静 ...

  6. 微信小程序实例教程(四)

    第八章:微信小程序分组开发与左滑功能实现   先来看看今天的整体思路: 进入分组管理页面 --> 点击新建分组新建 进入到未分组页面基本操作 进入到已建分组里面底部菜单栏操作 --> 从名 ...

  7. css3盒模型学习--利用box自适应布局

    box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典   的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box-flex属性还没 ...

  8. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  9. 引用 struts2标签详解 - wo的的日志 - 网易博客

    引用 元元 的 struts2标签详解   引用 COLD 的 struts2标签详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@t ...

  10. openstack controller ha测试环境搭建记录(四)——配置mysql数据库集群

    内容正式开始前,我已经在集群中添加了新的节点controller1(IP地址为10.0.0.14). 在所有节点上安装软件:# yum install -y mariadb-galera-server ...