第二章 一个简单的Login 应用程序

基于Flask-Login简单登录和权限控制实践 本次开发实现了基于Flask-Login的登录与权限管理系统,涵盖用户注册、角色分配、权限验证及错误处理,最终确保系统能安全处理用户角色与权限逻辑。 阅读详情

第一节 需求定义

简单的需求如下图

1 用户处在Welcome.jsp 页面,点击登录连接到达Login.jsp页面

2 在Login.jsp输入用户名密码,点击登陆按钮,转到LoginAction处理

3.1 在登陆成功的情况下,再回到Welcome.jsp页面,在页面上显示登录信息

3.2 在登陆失败的情况下,返回到Login.jsp显示登陆错误信息

Welcome.jsp

Login.jsp

1 开始登陆

2 登陆

3.1登陆成功

3.2登陆失败

LoginAction

 

第二节 使用maven建立基本开发结构

使用如下命令建立Struts2 应用程序框架结构

mvn archetype:create  

-DgroupId=com.jpleasure

-DartifactId=login 

-DarchetypeGroupId=org.apache.struts  -DarchetypeArtifactId=struts2-archetype-starter

-DarchetypeVersion= 2.0.5 -SNAPSHOT -DremoteRepositories=http://people.apache.org/repo/m2-snapshot-repository

目录说明

生成的Struts2开发框架目录满足一般的maven项目,主要由以下目录组成:

src

   ├─main                              源代码目录

   │  ├─java                             java代码

   │  ├─resources                        资源文件等

   │  └─webapp                           Web目录

   │      ├─jsp                              JSP目录

   │      ├─styles                           CSS目录

   │      └─WEB-INF                          WEB-INF目录

   └─test                              测试代码目录

        ├─java                              java代码

        └─resources                         资源文件等

重要文件:

src/main/resources

    applicationContext.xml              Spring配置文件

    log4j.properties                    log4j配置文件

    struts.properties                   struts参数文件

    struts.xml                          struts配置文件

    xwork-conversion.properties         xwork参数文件

 

src/main/webapp/WEB-INF

decorators.xml 

dwr.xml                            DWR配置文件

sitemesh.xml                       SiteMesh配置文件

web.xml                            Web部署描述文件

 

进入工程目录(login目录)使用如下命令建立Eclipse工程文件

mvn eclipse:eclipse

 

使用如下命令打包工程

mvn package

应用程序打包完成之后可以再login/target目录中看到login.war文件,这个文件就是最终的成果文件

 

使用如下命令运行应用程序

mvn jetty:run

 

也可以将login.war拷贝到tomcat的webapps目录下来运行struts2应用程序。

 

打开IE在浏览器中输入:

http://localhost:8080/login

可以看到如下画面

说明自动生成的框架已经可以运行。

 

第三节 补充Login功能

下面我们来完成login功能

首先将login工程导入到Eclipse中

 

之后建立在src/main/java目录中建立LoginAction类,代码清单如下:

package com.jpleasure.login.action;

 

import javax.servlet.http.HttpSession;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.ServletActionContext;

 

public class LoginAction extends ActionSupport {

    private String name;

    private String password;

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

   

    public String forward() throws Exception {

       return SUCCESS;

    }

   

    @Override

    public String execute() throws Exception {

       if("admin".equals(name)) {

HttpSession session = ServletActionContext.getRequest().getSession();

           session.setAttribute("name", name);

           return SUCCESS;

       } else {

           return INPUT;

       }

    }

}

Action具有以下特点:

1 从ActionSupport继承而来。

2 包含一些属性和getter,setter方法,这些属性用来保存客户端传递到服务器的数据,或者用来作为在JSP上显示的数据的源。

3 有一些返回String类型,无参数的方法,在LoginAction中是execute方法forwardLogin方法,这些方法就是Action需要执行的方法。

 

SUCCESS和INPUT都在com.opensymphony.xwork2.Action类中定义,类型为String,分别用来表示成功和输入结果。

 

在src/main/webapp中建立Welcome.jsp和Login.jsp两个JSP文件

Welcome.jsp代码清单如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

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

 

<!DOCTYPE html PUBLIC "-//W 3C //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</title>

</head>

<body>

 

<s:url action="forwardLogin" id="forwardLoginUrl"></s:url>

<s:a href="%{forwardLoginUrl}">Forward Login</s:a>

<%

    if(session.getAttribute("name") != null){

       out.println("<br/> login success.");

    }

%>

</body>

</html>

 

Login.jsp 代码清单如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

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

 

<!DOCTYPE html PUBLIC "-//W 3C //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</title>

</head>

<body>

<s:url action="login" id="loginUrl"></s:url>

<s:form action="%{loginUrl}">

    <s:textfield label="Name" name="name"/>

    <s:password label="Password" name="password" />

    <s:submit></s:submit>

</s:form>

</body>

</html>

这些JSP有如下特点:

1 有一个特殊的taglib声明,<%@taglib prefix="s" uri="/struts-tags" %>这是struts2的标准taglib声明。

2 一些s标签

<s:url action="forwardLogin" id="forwardLoginUrl"></s:url>定义了一个叫做forwardLoginUrl的指向forwardLogin的Action的路径。

同理:<s:url action="login" id="loginUrl"></s:url>定义了一个叫做loginUrl指向loginaction的Action的路径。

<s:a href="%{forwardLoginUrl}">Forward Login</s:a>定义了一个指向forwardLogin的链接,其中href使用了上面定义的内容。

<s:form action="%{loginUrl}">

    <s:textfield label="Name" name="name"/>

    <s:password label="Password" name="password" />

    <s:submit></s:submit>

</s:form>

定义了一个向login Action提交的form,这个Form提交name和password两个字段,这个Form的action指向使用了前面定义的loginUrl变量。

 

配置src/main/resources/struts.xml 文件

在默认的package中添加如下内容

<package name="myPackage" extends="struts-default">

<!-- login begin -->

<action name="forwardLogin" method="forward"

          class="com.jpleasure.login.action.LoginAction">

<result>/Login.jsp</result>

</action>

<action name="login" class="com.jpleasure.login.action.LoginAction">

<result name="input">/Login.jsp</result>

<result>/Welcome.jsp</result>

</action>

<!-- login end -->

…

</package>

 

每一个action表示一种向服务器的请求,name属性定了了action的名字,class是action对应的服务器端执行的Action类的名字,method是类中的被执行的方法的名字。

Result表示默认的结果(SUCCESS的结果),result可以添加name属性来表示对应的返回结果,例如:input

 

 

为了让应用程序开始的时候能够显示Welcome.jsp我们必须修改src/main/webapp/WEB-INF/web.xml,将其中的的welcome-file改为:

 

<welcome-file-list>

        <welcome-file>Welcome.jsp</welcome-file>

</welcome-file-list>

 

第三节 详细描述Login的功能

当我们使用IE访问login程序的时候,其实我们是向服务器发送了一个如下的请求:

http://localhost:8080/login

 

当应用服务器收到请求的时候,根据/login可以判断你所访问的应用程序是login,之后根据web.xml中定义的welcome-file找到默认的欢迎画面:Welcome.jsp

 

Welcome.jsp表示的过程中建立了一个如下的链接:

<a href="/login/forwardLogin.action">Forward Login</a>

 

我们点击这个链接的时候向服务器提交了一个如下的请求:

http://localhost:8080/login/forwardLogin.action 的请求

 

Struts2框架根据/forwardLogin.action找到对应的Action配置描述(Struts2框架会自动去掉.action后缀,之后进行匹配查找操作):

<action name="forwardLogin" method="forward"

          class="com.jpleasure.login.action.LoginAction">

<result>/Login.jsp</result>

</action>

使用LoginAction类的forward方法处理,当forward方法返回SUCCESS的时候,返回给客户端Login.jsp页面。

 

Login.jsp表示的过程中建立了一个如下的Form:

<form id="login" onsubmit="return true;" action="/login/login/login.action" method="POST">

<table class="wwFormTable">

<tr>

    <td class="tdLabel"><label for="login_name" class="label">Name:</label></td>

    <td><input type="text" name="name" value="" id="login_name"/></td>

</tr>

<tr>

    <td class="tdLabel"><label for="login_password" class="label">Password:</label></td>

<td><input type="password" name="password" id="login_password"/></td>

</tr>

<tr>

<td colspan="2">

<div align="right"><input type="submit" id="login_0" value="Submit"/></div>

</td>

</tr>

</table>

</form>

当点击Submit按钮提交Form的时候,name和password输入分别被提交,这个Form提交的路径是:/login/login/login.action

 

根据如下Action配置:

<action name="login" class="com.jpleasure.login.action.LoginAction">

<result name="input">/Login.jsp</result>

<result>/Welcome.jsp</result>

</action>

 

Struts2框架找到对应的LoginAction,同时将提交上来的name和password赋值给LoginAction实例,因为没有说明login调用的方法,所以Struts框架调用默认的方法:execute

Login登录窗口设置,成功启动主窗口,关闭登录窗口 1.登录窗口Form1登录成功后,开启主窗口Form2,自动关闭Form1 2.text自动转换为大写 3.按钮操作 立即下载

相关推荐

一个简单的Login 应用程序

一个简单的Login 应用程序

【Shell 命令集合 系统管理 】Linux 用户登录系统 login命令 使用指南

login命令是Linux系统中的一个命令,其作用是用户登录系统。当用户通过终端或远程连接登录到Linux系统时,系统会调用login命令来验证用户身份,并提供一个交互式的登录会话。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 8716

登录界面程序login

用labview开发的用户登录界面程序,仅供参考。

Nacos 开启鉴权后,注册失败,报unknown user!

Nacos 开启鉴权后,注册失败,报unknow user! 问题排查及解决方案

weixin_41165430的博客 4884

java login登陆程序

实现login登陆,输入用户名和密码,输入正确,页面跳转welcome.jsp页面。输入错误,重新输入。程序包含Location.java、login.jsp、welcome.jsp、web.xml 、struts.xml文件。一个简易实用的程序。

欧姆龙PLC与fanuc发那科机器人进行Ethrenet ip通信测试

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 截图中的程序设置和机器人EDS插件在下面链接 https://download.youkuaiyun.com/download/gojava/13770799 PLC为主站 机器人为从站 一、硬件部分 欧姆龙PLC ...

七兔自习室 1万+

使用javassist动态修改非spring管理的对象

【代码】使用javassist动态修改非spring管理的对象。

江宁山人的专栏 255

多臂老虎机——入门强化学习

多臂老虎机(Multi-Armed Bandit,MAB)问题是强化学习的经典入门例子,也是理解探索与利用(exploration-exploitation)平衡的重要案例。

qq_56683019的博客 2458

spring-cloud Naocos注册中心连接报错{ [SecurityProxy] login http request failed url}

原因就是:nacos服务端与java里的jar包版本不一样。

weixin_50851382的博客 2337

数字电路基础(CMOS电路、低功耗方法)

文章目录一、CMOS器件1.1.CMOS反相器1.2. CMOS与非门1.3.CMOS或非门1.4 CMOS与门和CMOS或门二、CMOS电路参数——功耗 一、CMOS器件 1.1.CMOS反相器 CMOS反相器实现非门功能,由一个PMOS管和一个NMOS管组成,其逻辑电路图如下: 其真值表如下: In PMOS NMOS Out 0 √ 导通 ×关闭 1 1 ×关闭 √...

Mr.翟的博客 1万+

在hyper-v管理器中修改WSL虚拟交换机后,打开wsl闪退

此次是因为修改了WSL虚拟交换机造成的wsl打不开或闪退,还有一种可能是关闭了hyper-v造成了wsl。

DN金猿的博客 1171

Flask-Login 让实现登录功能变简单

原文:https://www.jianshu.com/p/01384ee741b6 Web 的登录管理是一个比较复杂的过程,之前写过一篇基于 Rest API的登录实现(在这里),最近看到一篇思诚之道写基于 Flask-Login 的实现方法,不由赞叹,示例和讲述写得太棒了,基本是一看就懂,写作方法值得自己好好学习。本文是本人在学习这篇博客时的笔记。 Flask-Login 帮我们做了哪些事?...

@steveyg 1935

游戏大厂状态同步与帧同步技术全解析——让虚拟世界万物协同的“时间齿轮”

本文深入解析了大厂游戏开发中的两种核心同步技术:状态同步和帧同步。状态同步适合大型MMO和FPS游戏,由服务端计算并广播世界状态;帧同步则通过统一操作输入实现MOBA和RTS游戏的绝对公平。文章详细比较了两者的差异、适用场景和底层实现原理,并揭秘了《王者荣耀》《PUBG》等热门游戏的同步机制。同时探讨了本地预测、延迟补偿、防作弊等关键技术,以及未来AI和云游戏带来的同步新挑战,为开发者提供了全面的技术参考和实践指南。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 919

一个简单的login方法

//login方法class Login{//数据库里面的值,没学到数据库,就先简单的定义一个String[] usre={"admin"};String[] pswd={"admin"};//链接数据库,就遍历数据库里面的姓名与密码,然后去匹配boolean login(String usrename,String password){for(int x=0;x<usre.length;x++)

大梦想家 2359

图像处理之边缘检测[微分算子、Canny算子和LOG算子]

LOG算子是在经典算子的基础上发展起来的边缘检测算子,根据信噪比求得检测边缘的最优滤波器。边缘总是以强度突变的形式出现,可以定义为图像局部特性的不连续性,如灰度的突变和纹理结构的突变等。图像的边缘包含了物体形状的重要信息,它不仅在分析图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构。对于复杂的图像,采用Roberts算子不能较好地得到图像的边缘,而需要采用更加复杂的3X3的算子比如Prewitt算子。对于离散的图像f(x,y),边缘检测算子是用图像的垂直和水平差分来逼近梯度算子,即。

qq_44111805的博客 9833

把 ABAP SQL 窗口函数讲透:从 OVER 到 LEAD、RANK 与累计分析

ABAP SQL窗口函数在不丢失明细记录的前提下,为每行数据提供组内统计和排名功能。它通过OVER子句定义计算窗口,支持三类函数:聚合型(AVG/SUM等)、排名型(ROW_NUMBER/RANK等)和取值型(LEAD/LAG)。相比GROUP BY会合并多行数据,窗口函数保留原始记录同时附加计算结果,特别适合需要保留明细又要展示统计信息的业务场景,如销售排名、客户分层分析等。语法核心是OVER子句,通过PARTITION BY分组,ORDER BY排序,可灵活定义计算范围。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1273

【Flask】一文详解 Flask-Login

Flask-Login 为 Flask 提供用户会话管理。它处理登录、注销和长时间记住用户会话等常见任务。Flask-Login 不绑定到任何特定的数据库系统或权限模型。唯一的要求是您的用户对象实现一些方法,并且您向能够从用户 ID 加载用户的扩展提供回调。

Data · Model · Agent · Repeat 7559

Skills入门学习路线

简单来说,Skills就像是给Claude准备的”插件包"或”工具箱”。它是一个集合,里面装了特定的操作指令(Instructions)、可执行脚本(Scripts)和相关素材(Resources)。2025 年 10 月中旬,Anthropic 正式发布 Claude Skills。两个月后,Agent Skills 作为开放标准被进一步发布,意在引导一个新的 AI Agent 开发生态。OpenAI、Github、VS Code、Cursor 均已跟进。为了更好的理解,你可以把。

十二测试录 1098

Flask-Login使用详解

先看一下flask-login模块的整体架构 基础的信息和全局配置这里就不多说,需要用到再斟酌也可以的。 这里也是针对每个模块较为常用的进行解释说明,后期再使用过程中遇到会进行补充。 Login_Manager LoginManager是一个类,有多个方法和属性;此类初始化的对象用于保存用于登录的设置。实例:class:LoginManager * *不绑定到特定应用程序,因此可以在代码的主体...

gymaisyl的博客 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

如何用C#写一个简单的Login窗口

  具体做法如下:首先,创建Login窗口,然后添加相应的输入框和按钮,设置窗口的AcceptButton为窗体的确认按钮,而CancelButton为窗体的取消按钮。例如:            this.AcceptButton = this.btnOK;            this.CancelButton = this.btnCancel; 定义确定按钮以及取消

专业提供企业信息化方案,为企业信息化改善提供专业方案 628

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 第一章 Struts2 概览
下一篇: 第三章Struts配置
struts2
博客等级 码龄19年 885粉丝 103原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值