Struts2入门篇-- 用户登录



众所周知,Struts2是一款优秀的Java MVC框架,由控制器决定展现那个视图给用户。从开发者角度来认识一个框架,第一步是能快速搭建一个基于该框架的应用或demo,在会使用的基础上进一步了解其实现原理更有助于运用。

关于Struts2实现原理,以后会详细阐述,我们先来做一个小小实验,也就是在Web 应用中最常见的用户登录。

1. 配置Web.xml

在Web.xml中加上如下内容:

<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>

该配置就是告诉Web容器(在作者的应用中就是tomcat)也就是:对于所有的url请求都是用一个叫struts2的Filter进行处理,这个Filter就是Struts2 程序的入口。通过这个Filter及相关类的处理才能实现MVC控制。

2. 配置Struts.xml

在程序中引入Struts2相关类库(jar包)之后,必须配置Struts.xml,告诉容器:对那些url请求应该调用哪个Action类处理,根据处理的结果展示某个视图。

<?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.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />
    <package name="Main" namespace="/" extends="struts-default">
	<action name="login_*" class="com.struts.action.LoginAction" method="{1}">
            <result name="input">/Login.jsp</result>
            <result name="success">/Success.jsp</result>
	</action>
    </package>
</struts>

Note这里使用了DynamicMethodInvocation,根据action的名字调用对应的method,如果请求的url是http://<hostname:port>/<Application Name>/login_Input,容器会调用com.struts.action.LoginAction类的Input 方法进行处理,该方法不做任何处理,直接返回字符串”input”,Struts2会展示Login.jsp页面给浏览器;如果请求的url是http://<hostname:port>/<Application Name>/login_Login, 容器会调用com.struts.action.LoginAction类的Login方法(在struts2中,没有指定method时,默认调用execute方法),在该方法中进行校验用户名和密码,如果校验不通过返回字符串”input”,展示登陆页面给浏览器,如果校验成功返回字符串”success”,就展示登陆成功页面”Success.jsp”给浏览器<一般情况下是跳转到某个合适的页面,result 的type可以是redirct/redirectAction>。

3.JSP 页面

很显然Login.jsp是一个用户登录页面,要求输入用户名和密码,提交到login_Login Action进行登录验证。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="GB18030"%>
<%@taglib uri="/struts-tags" prefix ="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Welcome to CRM!</title>
    </head>
    <body>
        <s:form action="login_login" method="post">
            <s:textfield name="username" label="username"/>
            <s:password name="password" label="password"/>
            <s:submit/>
        </s:form>
    </body>
</html>

登录成功页面Success.jsp:在这里只是模拟成功登录,为简便起见,只是提示给用户”Success”

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="GB18030"%>
    <%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Login Success</title>
    </head>
    <body>
	<h1>Login Success!</h1>
    </body>
</html>

4. LoginAction类(com.struts.action.LoginAction)

package com.struts.action;

import com.opensymphony.xwork2.ActionSupport;
import com.struts.model.*;
import com.struts.service.*;

public class LoginAction extends ActionSupport {
    private String username;
    private String password;

    public String getUsername() {
	return username;
    }

    public void setUsername(String username) {
	this.username = username;
    }

    public String getPassword() {
	return password;
    }

    public void setPassword(String password) {
	this.password = password;
    }

    public String input(){
	return INPUT;
    }

    public String login() {
        if (!Validation())
            return INPUT;
        // Start of business
	Connection cn = null;
        PreparedStatement pstmt = null;
	ResultSet rs = null;
	Boolean LoginSuccess = false;
	try {
	    Class.forName("com.mysql.jdbc.Driver");
	    cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/personal?user=root&password=root");
	    String getUserSql = "select * from userinfo where username = ? and password = ?";
            pstmt = cn.prepareStatement(getUserSql);
 	    pstmt.setString(1, userName);
	    pstmt.setString(2, passWord);
	    rs = pstmt.executeQuery();
	    if (rs.next()){
		 LoginSuccess = true;
	    }
	} catch (SQLException e) {
	    //记录日志
	} finally{
	    try{
		rs.close();
		pstmt.close();
		cn.close();
            }catch(SQLException e1){
                //记录日志
	    }
	}
        //End of business
	if (LoginSuccess)
	    return SUCCESS;
	return INPUT;
    }

    public boolean Validation() {
	if (username != null && !username.trim().equals("") && password != null
	    && !password.trim().equals(""))
	    return true;
	else
	    return false;
    }
}

这里必须有get/set 方法(确切的说是set方法),Struts才会帮你自动将页面提交的username 和password赋值给Action类的username 和password字段。

比较好的做法是将业务逻辑封装成一个单独的模块,在login方法中new 一个业务逻辑类对象,调用对应方法根据用户名密码去数据库校验,get一个Model实例,如果该实例不为空,表明对应用户名和密码的用户存在,返回成功,否则返回input,跳转到登录页面,要求重新输入用户名和密码。

对于初学者而言,这已经足够了。

5. 写给自己

不积跬步,无以至千里,记录点滴,激励自己,帮助来者,与君共勉。

时间: 2024-10-06 16:23:25

Struts2入门篇-- 用户登录的相关文章

struts2 学习(三) ----- 用户登录验证

下面是struts2 的第三个程序(用户登录验证)步骤:(需要新建login.jsp,Login.java和message.jsp) 1.增加Struts框架,步骤在第一篇中. 2.新建一个login.jsp.布局如下: 3.然后新建一个class,名为Login.java,代码如下: 4.在struts.xml文件中,代码如下: 5.新建message.jsp页面,代码如下: 6.OK,运行. **************************************************

Shiro安全框架入门篇(登录验证实例详解与源码)

一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和JavaEE项目中都可以使用.它主要用来处理身份认证,授权,企业会话管理和加密等.Shiro的具体功能点如下: (1)身份认证/登录,验证用户是不是拥有相应的身份: (2)授权,即权限验证,验证某个已认证的用户是否拥有某个权限:即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色.或者细粒度的验证某个用户对某个资源是否具有某个权限: (3)会话管理,即用户登录

Java入门:用户登录与注册模块1(实践项目)——分析

任务描述:用户登录与注册是大多数软件都拥有的一个模块.请编写一个控制台程序,实现用户的登录与注册功能,并且用户能够修改自己信息. [需求分析]由于本程序是一个演示程序,用户的信息我们做简化处理,仅包括:用户名.密码和EMAIL. 1.系统功能分析 分析一个系统或一个模块,我们首先需要了解系统需要实现哪些功能,通常可采用用例图来描述分析结果.对于本任务,用例图为: 对于每个用例,可以使用用例描述表来详细阐述用例内容.用户登录注册模块的三个用例描述表如下: (1)登录用例描述表 用例名称 登录 标识

Struts2 入门篇

Struts2简介 Struts2 是一个开源.免费的Web框架 官网:http://struts.apache.org/ Struts2.5.2新版本搭建环境更新 导入jar包,必备jar包如下:尤其是log4j.jar和javassist.jar为必备包 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http

【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

基于Struts2的用户登录程序

基本步骤: 1.新建Java工程,File>New>Project>Web>Dynamic Web Project,并将工程命名为:Struts2_Demo 2.导入struts2的重要jar包到WebContent>lib下 3.新建web.xml,右击WEB-INF>New>Other>XML>XML File,并命名为web.xml 更改其内容如下: <?xml version="1.0" encoding="

【Struts2+Hibernate3+Spring3】利用SSH整合,完成打印用户表,用户登录、注册、修改密码系统

本文视图尽可能不杂糅其它技术,尽可能少写代码,完成SSH整合.以致于各位在现有网上资料越来越天花龙凤之下,清晰地了解到传说中的三大框架SSH是怎么整合的. 一.SSH的下载 首先SSH的下载就已经是一个难点.SSH三个地方同时推出各自的新技术,已经要求利用Maven完成其版本的同步.毕竟Spring的版本,决定其能整合什么版本的Struts与Hibernate.Spring3.0.5就不能整合Hibernate4.x了.因此本文选取的SSH的版本,分别为struts 2.3.20 GA.Hibe

【struts2+hibernate+spring项目实战】用户登录校验(struts拦截器)

一.概述 项目中所有页面均放入WEB-INF,所有页面安全性得到了很大程度的提高.但是当用户登录后长时间没有操作时,会造成Session数据的过期,如果此时获取Session中的数据,必定会引发WEB引用的空指针异常,造成数据错误,程序崩溃.因此需要一种机制保障每次发送请求执行Action中的方法之前校验用户是否处于登录状态.针对上述分析,可以选用两种实现方式.AOPAOP思想可以在任意方法执行前进行拦截,完成原始方法执行前的操作Struts2拦截器Struts2拦截器可以再Struts2的任意

Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子

需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重新登录 4.点击学生名称之后,可以看到学生的详细信息 后端: 1 from flask import Flask 2 from flask import request 3 from flask import render_template 4 from flask import redirect 5 6 USER = {'username': 'oldboy', 'p