Struts2的一个入门实例----登录功能

简介: 一、搭建环境与测试     1、web.xml文件,配置核心Filter 1: 2: 7: 8: struts2 9: org.apache.struts2.

一、搭建环境与测试

     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路径下

         2016-12-04_14-35-25

     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、运行结果

2016-12-04_14-55-52 2016-12-04_14-58-09 2016-12-04_14-58-29

 

二、运行机制处理流程

2016-12-04_15-03-55

三、定义国际化资源

     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、运行结果

                                   2016-12-04_15-33-27         2016-12-04_15-36-58

 

 

三、增加数据校验

     继承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、运行结果

2016-12-04_15-48-07     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)、运行结果

2016-12-04_16-00-40

 

 

 

 

    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>
当神已无能为力,那便是魔渡众生
目录
相关文章
|
6月前
若依框架 --- 修改默认跳转页面
若依框架 --- 修改默认跳转页面
727 0
|
5月前
|
Java 数据安全/隐私保护 Spring
SpringSecurity6从入门到实战之默认用户的生成流程
该文档介绍了SpringSecurity6中默认用户的生成流程。在`SecurityAutoConfiguration`源码中,通过`SecurityProperties`配置类,系统默认创建了一个名为&quot;user&quot;的用户,其密码是一个随机生成的UUID。这个用户是在没有在`application.properties`中设置相关配置时自动创建的。
|
5月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
106 5
|
4月前
|
安全 Java 数据库
|
4月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
|
5月前
|
应用服务中间件
大事件后端项目03----sprinigboot配置文件—基本使用
大事件后端项目03----sprinigboot配置文件—基本使用
|
6月前
|
存储 前端开发 Java
Javaweb之SpringBootWeb案例之登录校验功能的详细解析
Javaweb之SpringBootWeb案例之登录校验功能的详细解析
32 0
|
6月前
|
JSON 前端开发 数据安全/隐私保护
Javaweb之SpringBootWeb案例之 登录功能的详细解析
Javaweb之SpringBootWeb案例之 登录功能的详细解析
48 0
|
安全 Java 数据库连接
四.SpringSecurity基础-自定义登录流程
SpringSecurity基础-自定义登录流程
|
安全 前端开发 数据安全/隐私保护
登录的功能的实现和登录功能的拦截信息(课时十六)
登录的功能的实现和登录功能的拦截信息(课时十六)
65 0