Struts2学习笔记--Struts2登陆验证项目

为项目添加Struts2支持,用的是struts-2.1.6版本的Struts2

Struts2的struts-2.1.6的下载链接,在我的百度网盘里面有

http://pan.baidu.com/s/1bn8PANl

在下载好的Struts2目录的lib下找到下面的jar包,复制到项目的WEB-INF下的lib中

Struts2学习笔记--Struts2登陆验证项目

配置struts.xml文件,在项目src目录下新建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>
<!-- 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />
    <include file="example.xml"/>

    <package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="index" />
        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>
 -->
  
    <package name="default" namespace="/" extends="struts-default">
       
        <action name="login" class="net.hncu.struts2.action.LoginAction">
         <result name="error">/login_failure.jsp</result>
            <result name="success">/login_success.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
    </package>
 
  <!-- Add packages here -->
</struts>

配置web.xml文件,修改WEB-INF下的wev.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
 <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>
    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

编写java类,主要由LoginAction.java和LoginCheck.java,LoginAction类处理主要的逻辑业务,LoginCheck类用于设置登陆验证的密码和用户名,主要用于校验登陆信息。代码如下

LoginAction.java

package net.hncu.struts2.action;
import net.hncu.struts2.LoginCheck.LoginCheck;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
 private String uname;
 private String upassword;
 public String getUname() {
  return uname;
 }
 public void setUname(String uname) {
  this.uname = uname;
 }
 public String getUpassword() {
  return upassword;
 }
 public void setUpassword(String upassword) {
  this.upassword = upassword;
 }
 
 //执行输入
 public void validate(){
  //如果用户名为null,或者为空的话,那么提示错误信息
  if(getUname()==null||"".equals(getUname().trim())){
   this.addFieldError("uname",getText("username.required"));
  }
  //如果密码为null,或者为空的话,那么提示错误信息
  if(getUpassword()==null||"".equals(getUpassword().trim())){
   this.addFieldError("upassword",getText("password.required"));
  }
 }
 
 //重写execute方法,实现跳转
 public String execute()throws Exception{
  LoginCheck lc=new LoginCheck();
  if(lc.isLogin(getUname(),getUpassword())){
   ServletActionContext.getRequest().setAttribute("login","true");
   return "success";
  }
  else{
   return "failure";
  }
 }
 
}

LoginCheck.java

package net.hncu.struts2.LoginCheck;
public class LoginCheck {
 public boolean isLogin(String name,String password){
  if("liuyanbing".equals(name)&&"liuyanbing".equals(password)){
   return true;
  }else{
   return false;
 
 }
  }
}

注意这里为两个类都设置了包名。

开始程序国际化操作,程序国际化是为了处理国外人士使用该程序时,能够给予国外语言的反馈。比如当中国用户没有在登陆框中输入密码或者用户名,则显示中文提示信息,让用户注意;而国外人士没有输入用户名或者密码的时候,则用英文或者其他语言显示提示信息。这里使用zh_CN(中文简体)和en_US(美国英语)作为程序国际化的实例。

创建properties(资源文件),在项目的src目录下新建两个properties文件,分别命名为messageResource_en_US.properties

messageResource_zh_CN.properties

资源文件命名规则非常重要,意味着你是否能够顺利实现程序国际化,具体命名规则是,basename_语言代码_国家代码.properties。

中文环境messageResource_zh_CN.properties资源文件内容如下

login.title=登陆

login.username=用户名

login.password=密码

password.required=必须输入密码

username.required=必须输入用户名

由于编码问题,如果在myeclipse下的java编码默认为iso-8859的话,将无法保存中文内容编码,因此必须在myeclipse下打开Windows--Preferences--General--Content Types--Text-Java Properties File下的Default encoding改为utf-8,然后Update。就可以保存中文环境下的messageResource_zh_CN.properties资源文件了。

但由于中文还是属于非西欧字符,所以必须将该字符转换成Unicode编码字符,才能让资源文件辨识value值。这里可以使用JDK安装目录中bin目录下的"native2ascii.exe"文件,打开后就像CMD一样,输入中文得到该中文的Unicode编码字符。如下所示

Struts2学习笔记--Struts2登陆验证项目

赋值上面的Unicode编码字符,替换掉中文环境messageResource_zh_CN.properties资源文件的内容,如下

login.title=\u767B\u9646

login.username=\u7528\u6237\u540D

login.password=\u5BC6\u7801

password.required=\u5fc5\u987b\u8f93\u5165\u5bc6\u7801

username.required=\u5fc5\u987b\u8f93\u5165\u7528\u6237\u540d

英文环境messageResource_en_US.properties资源环境的配置相对简单,代码如下

login.title=login

login.username=username

login.password=password

password.required=password was required

username.required=username was required

配置好资源文件之后,接下来就是加载资源文件,有两种方法

第一种方法是在struts.xml文件中配置struts.custom.il8.resources常量,在<struts>标签中添加如下<constant>元素,如下

<constant name="struts.custom.il8n.resources=messageResource" value="messageResource"></constant>
<!--  =后面的messageResource是资源文件的basename名称 -->

第二种方法是在src目录下新建struts.properties文件,输入以下代码:

struts.custom.il8n.resources=messageResource

最后建立jsp登陆验证页面。首先建立两个跳转结果页面,分别是登陆成功页面login_success.jsp和登陆失败页面login_failure.jsp页面。代码如下

login_success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login_success.jsp' starting page</title>
    
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">    
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
  
  <body>
     <center>
      <%
       if(request.getAttribute("login")!=null&&request.getAttribute("login").equals("true")){
      %>
       <h2>登陆成功</h2>
      <%
       }else{
      %>
      <jsp:forward page="login.jsp"></jsp:forward>
      <%
       }
      %>
     </center>
  </body>
</html>

login_failure.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login_failure.jsp' starting page</title>
    
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">    
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
  
  <body>
     <center>
      <h2>登录失败</h2> 
     </center>
  </body>
</html>

最后建立登陆验证页面login.jsp,这里使用了struts2标签库,所以必须在jsp页面引入struts-tags

<% @taglib prefix="s" uri="/struts-tags" %>

具体的login.jsp代码如下

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title><s:text name="login.title"></s:text></title>
    
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">    
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
  
  <body>
   <center>
   <s:i18n name="messageResource">
   <s:text name="login.title"></s:text>
     <s:form action="login">
      <s:textfield name="uname" key="login.username"></s:textfield>
      <s:password name="upassword" key="login.password"></s:password>
      <s:submit value="登陆"></s:submit>
      <s:reset value="重置"></s:reset>
     </s:form>
     </s:i18n>
   </center>
  </body>
</html>

建立好所需代码文件后,部署项目,为了验证程序国际化,就不在myeclipse中进行debug,而是在internet explorer中进行调试。调试中文环境结果如下

Struts2学习笔记--Struts2登陆验证项目

Struts2学习笔记--Struts2登陆验证项目

浏览器中设置首语言

Struts2学习笔记--Struts2登陆验证项目

调试英文环境结果如下:

Struts2学习笔记--Struts2登陆验证项目

Struts2学习笔记--Struts2登陆验证项目





你可能感兴趣的:(struts2,登陆验证,程序国际化)