zoukankan      html  css  js  c++  java
  • 【SSH学习笔记】用Struts2实现简单的用户登录


    准备阶段

    在使用学习Struts2的时候首先要下载相应的架包

    Struts2资源下载

    这里建议下载第一个,在struts-2.5.14.1-all.zip里有很多实用的东西,不仅有架包还有官方为开发者准备的实例等。

    任何所学的知识最有效的检测方式就是做一个小小的实例,这里吉力就带着大家看看Struts2是怎么实现这个功能的。

    Struts2核心jar包
    struts2-core-2.3.15.3.jar
    asm-3.3jar
    asm-common-3.3jar
    asm-tree-3.3jar
    xwork-core-2.3.15.3.3.jar
    commons-io-2.0.1.jar
    commons-lang-3.3.1.jar
    commons-fileupload-1.3.jar
    commons-logging-1.1.3.jar
    freemarker-2.3.16.jar
    log4j-1.2.17.jar
    ognl-3.0.6.jar
    javassist-3.11.0.GA.jar

    项目框架:


    1.配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    
    <display-name>Struts01</display-name>
    <!-- 配置 Struts2框架核心Filter -->
    <filter>
    <!-- 过滤器名 -->
    <filter-name>struts2</filter-name>
    <!-- 配置Struts2核心Filter实现类 -->
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <!-- 让Struts2的核心Filter拦截所有请求 -->
    <filter-mapping>
    <!-- 过滤名 -->
    <filter-name>struts2</filter-name>
    <!-- 匹配所有请求 -->
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- <welcome-file-list>  
        <welcome-file>index.html</welcome-file>  
      </welcome-file-list>  
      -->
    </web-app>
    

    任何MVC框架需要与Web应用整合时都要借助web.xml配置文件。通常MVC框架只需要在Web应用里加载一个核心控制器即可,对于Struts2来说就是加载StrutsPrepareAndExecuteFilter。一个Web应用只要加载StrutsPrepareAndExecuteFilter后,就具有Struts2的基本功能。


    2.创建登录视图

    <%@ 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 'index.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>
      <form action="login.action" method="post">
      
        用户名:<input type="text" name="useName"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录"><input type="reset" value="重置"> 
      
      </form>
      </body>
    </html>
    

    上述页面代码里定义了一个表单,该表单提交给login.action进行处理。表单里有2个输入文本框,分别接收用户名和密码。


    3.创建实体POJO层

    在src下的com.beans包里创建实体User

    package com.beans;
    
    public class User {
        private String useName;
        private String password;
        
        public User() {
            // TODO 自动生成的构造函数存根
        }
        public User(String useName, String password) {
            super();
            this.useName = useName;
            this.password = password;
        }
        public String getUseName() {
            return useName;
        }
        public void setUseName(String useName) {
            this.useName = useName;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        
    }
    

    在Strut2里,不对,是在整个SSH框架里实体的概念特别重要,它与数据库表相对应,将数据很好的保持了起来,实现了数据的持久化,这样我们以实体的形式传递数据和映射就变得简单。


    4.创建业务控制器

    在src下的com.action包里添加用于处理用户登录的业务控制器LoginAction类

    package com.action;
    
    import com.beans.User;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class LoginAction extends ActionSupport implements ModelDriven<User>{
        User user=new User();
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    
        public String execute()
        {
            if(user.getUseName().equals("jili")&&user.getPassword().length()>=6)
            {
                return SUCCESS;
            }
            else
            {
                return ERROR;
            }
        }
    
        @Override
        public User getModel() {
            // TODO 自动生成的方法存根
            return user;
        }
        
    }
    

    这里采用了模型驱动的方式实现了对于用户输入数据的映射,这个方法比再在action里添加属性接收后再赋给User更加高效。


    5.配置业务控制器struts.xml

    再src下新建struts.xml配置文件,在该文件配置LoginAction

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    <constant name="struts.devMode" value="true"/>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    
        <package name="default" namespace="/" extends="struts-default">
            <!-- 定义一个叫user的Action,并带上实现类的路径 -->
            <action name="login" class="com.action.LoginAction">
                <!-- 配置execute()方法返回值与视图资源之间的映射关系 -->
                <result name="success">/suc.jsp</result>
                <result name="error">/error.jsp</result>
            </action>
        </package>
    </struts>

    该配置文件配置了一个名为login的Action,并指明了Action实现类com.action.LoginAction。在


    6.运行显示

    suc.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 'suc.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>
        欢迎${param.useName}登录!
      </body>
    </html>
    

    error.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 'error.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>
       账号或者密码错误!<a href="input.jsp">返回</a> <br>
      </body>
    </html>
    

    小结

    本篇博文只是最简单地实现了用户登录,这也直观验证了Struts2是MVC的很好的应用。

    当然,Struts2还有很多应用比如动态方法的调用、标签库等使用,吉力会在今后的博文里会给大家举例子说明。

    原文出自:https://www.cnblogs.com/jilige/p/8029918.html

  • 相关阅读:
    C#实现注册码
    多表链接 Left join
    Repeater 一行显示两列数据
    Repeater一行显示数据库中多行表记录
    HP QC(Quality Center)在Windows 7 IE8 IE9下不能工作解决方案
    Android应用换肤总结
    Lua 第一个应用程序 Hello World
    JNI 技术与 Android 应用
    NSAutoreleasePool' is unavailable: not avail
    1-2基础控件
  • 原文地址:https://www.cnblogs.com/gu-bin/p/10436811.html
Copyright © 2011-2022 走看看