zoukankan      html  css  js  c++  java
  • 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=u767Bu5F55u6210u529Fu9875u9762
    
      2: failPage=u767Bu5F55u5931u8D25u9875u9762
    
      3: user=u7528u6237u540D
    
      4: pass=u5BC6u7801
    
      5: login=u767Bu5F55
    
      6: welcome=u6B22u8FCEuFF0C
    
      7: fail=u767Bu5F55u5931u8D25uFF0C

         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=u767Bu5F55u6210u529Fu9875u9762
    
      2: failPage=u767Bu5F55u5931u8D25u9875u9762
    
      3: user.required=u7528u6237u540Du5FC5u987Bu6B63u786Eu8F93u5165
    
      4: pass.required=u5BC6u7801u5FC5u987Bu6B63u786Eu8F93u5165
    
      5: user=u7528u6237u540D
    
      6: pass=u5BC6u7801
    
      7: login=u767Bu5F55
    
      8: welcome=u6B22u8FCEuFF0C
    
      9: fail=u767Bu5F55u5931u8D25uFF0C

        (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>
  • 相关阅读:
    点击拖动,让物体旋转
    unity中让物体不能穿到另一个物体里面去
    XML一小节
    unity中摄像机的控制---调整摄像机,不让他摔倒
    Unity 制作游侠暂停
    unity使用 NGUI制作技能冷却效果的思路
    unity中设置贴图的透明
    C#中实现打开文件夹所在的位置
    Windows下的MongoDB的安装与配置
    Scrapy运行中常见网络相关错误
  • 原文地址:https://www.cnblogs.com/liuzhongfeng/p/6131039.html
Copyright © 2011-2022 走看看