当前位置: 首页 > news >正文

一个基于servlet的MVC项目-登录验证

一、MVC的概念

MVC是Model、View、Controller的缩写,分别代表 Web 应用程序中的3种职责1 模型:用于存储数据以及处理用户请求的业务逻辑。
2视图:向控制器提交数据,显示模型中的数据。
3控制器:根据视图提出的请求,判断将请求和数据交给哪个模型处理,处理后的有关结果交给哪个视图更新显示。

二、基于servlet的MVC模式

 

 基于Servlet的MVC模式的具体实现如下。
1.模型:

一个或多个JavaBean 对象,用于存储数据(实体模型,由JavaBean类创建和处理业务逻辑(业务模型,由一般的 Java 类创建)。
2视图:

一个或多个JSP页面,向控制器提交数据和为模型提供数据显示,JSP页面主要使用HTML标记和JavaBean 标记来显示数据。
3控制器:

一个或多个 Servlet 对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的JavaBean,并将处理结果存放到实体模型JavaBean中输出给视图显示。基于Servlet的MVC模式的具体实现如下。
模型:一个或多个JavaBean 对象,用于存储数据(实体模型,由JavaBean类创建和处理业务逻辑(业务模型,由一般的 Java 类创建)。
2视图:一个或多个JSP页面,向控制器提交数据和为模型提供数据显示,JSP页面主要使用HTML标记和JavaBean 标记来显示数据。
3控制器:个或多个 Servlet 对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的JavaBean,并将处理结果存放到实体模型JavaBean中输出给视图显示:

 

三、代码 

 1.大致框架:

 

2. jsp页面-loginCheck

 

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action ="loginCheckServlet" method ="post">
<table><tr><td>用户名:</td ><td><input type ="text" name ="name"/></td></tr><tr><td>密 码:</td><td><input type ="password" name="pwd"/></td></tr><tr><td><input type="submit" value ="提交"/></td ><td><input type="reset" value ="重置"/></td ></tr >
</table>
</form></body>
</html>

3.jsp页面-loginSuccess 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>loginSuccess.jsp</title>
</head>
<body>
<jsp:useBean id="user" type="dto.User" scope="request"/>
恭喜<jsp:getProperty property="name" name="user"/>登录成功!
<!-- 用来获取user对象的name,显示在页面上"恭喜[用户名]登录成功" -->
</body>
</html>

 <!-- 这段JSP代码的作用是显示用户登录成功的消息,并使用了JavaBean(dto.User)来存储用户信息 -->

<!-- 用<jsp:useBean>标签实例化一个名为user的对象,类型为dto.User,如果该不存在,会创建一个新的实例,如果存在,回复用之前的 -->

4. 实体模型user

 

package dto;/*定义实体模型来表示数据*/public class User {private String name;private String pwd;public String getName() {return name;}public void setName(String name) {this.name=name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd=pwd;}
}

5. 业务模型

 

package service;import dto.User;/*定义业务模型来处理业务,检查用户名和密码是否正确*/public class UserCheck {public boolean validate(User user) {if(user!=null && user.getName().equals("JSPMVC")) {if(user.getPwd().equals("MVC")) {return true;}return false;}return false;}
}

4. 控制层

package servlet;import java.io.IOException;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import dto.User;
import service.UserCheck;/*控制器:一个或多个Servlet对象,根据视图提交的请求进行控制,* 即将请求转发给 处理业务逻辑的JavaBean,* 并将结果存放到实体模型JavaBean中,* 处理后的结果交给视图显示*/
/*表单提交中servlet的配置方法*/
@WebServlet(name="loginCheckServlet",urlPatterns=("/loginCheckServlet"))public class loginCheckServlet extends HttpServlet{private static final long serialVersionUID = 1L;/* 序列化ID,相当于身份认证,主要用于程序的版本控制,* 保持不同版本的兼容性,在程序版本升级时避免程序* 报出版本不一致的错误 */protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{doPost(request,response);/*因为这个是控制器,是将视图层转发给业务层,处理后又转给视图层* 所以我们需要两个层之间进行通信,HTTP就是用于传输超文本数据的应用层协议* 有两个方法处理HTTP请求,doGet和doPost* 对应HTTP GET请求 和HTTP POST请求* GET用于获取数据 POST用于提交数据*/}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{/*传进来两个参数,HttpServletRequest用于获取客户端的数据* ,HttpServletResponse用于浏览器给客户端的响应*/request.setCharacterEncoding("utf-8");/*设置响应内容类型*/String name= request.getParameter("name");//获取HTTP请求的参数的值String pwd = request.getParameter("pwd");User user = new User();//实例化一个对象,用对象调用其属性或方法user.setName(name);//数据存储在模型user中user.setPwd(pwd);UserCheck uc = new UserCheck();//实例化业务模型userCheckif(uc.validate(user)) {//validate方法传进来一个user,返回boolean类型,看登录凭据是否有效request.setAttribute("user", user);/*setAttribute用于向请求对象中添加属性void setAttribute(String name, Object value)name参数是要设置的属性的名称。value参数是要设置的属性的值,可以是任何Java对象在后续的请求处理中,可以通过请求对象访问这个属性,从而获取和使用用户对象的相关信息使用EL表达式${user}来获取这个用户对象通过${user.username}可以获取并显示用户的用户名*/RequestDispatcher dis = request.getRequestDispatcher("loginSuccess.jsp");//将请求转发到名为"loginSuccess.jsp"的JSP页面dis.forward(request, response);//执行请求转发} else {response.sendRedirect("loginCheck.jsp");//发送一个重定向}}
}

 

相关文章:

一个基于servlet的MVC项目-登录验证

一、MVC的概念 MVC是Model、View、Controller的缩写&#xff0c;分别代表 Web 应用程序中的3种职责1 模型:用于存储数据以及处理用户请求的业务逻辑。 2视图:向控制器提交数据&#xff0c;显示模型中的数据。 3控制器:根据视图提出的请求&#xff0c;判断将请求和数据交给哪个…...

Windows 11 下 kafka 的安装踩坑

安装 windows系统kafka小白入门篇——下载安装&#xff0c;环境配置&#xff0c;入门代码书写&#xff08;推荐&#xff09; kafka在windows下安装和使用入门教程 问题1 参考链接 运行kafka集成的zookeeper时&#xff0c;命令&#xff1a;bin\windows\zookeeper-server-star…...

二维数组:行列互换/求最大值及其所在位置/求各行各列的和/矩阵乘积/深入理解二维数组

二维数组 1.定义 只有行号可以省略&#xff0c;初始化 全部初始化/部分初始化/不初始化 2.元素引用 3.存储形式 :顺序存储 按行存储 4.深入理解二维数组 #include<stdio.h> #include<stdlib.h>#define M 2 #define N 3int mian() {int a[M][N] {{1,2,3},{4,5,6}}…...

The Onion Router-洋葱

目录 Tor的运作原理 Tor挑战和局限性 Tor&#xff0c;即The Onion Router&#xff08;洋葱路由器&#xff09;&#xff0c;是一个用于匿名通信的开放网络&#xff0c;它旨在增强用户的隐私和安全。Tor的名字源自其设计原理&#xff0c;类似于将信息包装在多层“洋葱”中&…...

自动化工具 Ansible:playbooks 剧本编写

目录 前言 一、playbooks 剧本概述 1、playbooks 剧本概念 2、playbooks 剧本组成部分 3、playbooks 剧本特点与优势 二、ansible-playbook 命令 三、playbooks 剧本简单实例 1、编写 apache 的 yum 安装部署脚本 2、编写 nginx 的 yum 安装部署剧本 四、playbooks 定…...

AttributeError: module ‘flask.app‘ has no attribute ‘route‘

秒解方法一&#xff1a; # 未引入Flask app Flask(__name__)秒解方法二&#xff1a; AttributeError: ‘module’ object has no attribute ‘route’错误描述&#xff1a; 这个错误通常发生在使用 app.route 装饰器时&#xff0c;表示 Flask 无法找到 route 属性。 解决方法…...

在云计算与人工智能中,7ECloud扮演着什么样的角色

数据驱动的时代&#xff0c;云计算和人工智能已成为推动现代科技进步的两大引擎。作为一家专注于云计算的公司&#xff0c;7ECloud正是在这个领域发挥自己的力量&#xff0c;力图为企业提供一站式解决方案&#xff0c;并拥有来自厂家的源头支持&#xff0c;用极其低的价格助力企…...

视频推拉流EasyDSS视频直播点播平台如何优先展示正在直播的直播间?

视频推拉流EasyDSS视频直播点播平台集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景上&#xff0c;平台可以运用在互联网教育、在线课堂、游戏…...

JavaEE之线程(4)——线程安全、线程安全的原因,synchronized关键字

前言 在本栏的前面的内容中&#xff0c;我们介绍了线程的创建、Thread 类及常见方法、线程的状态&#xff0c;今天我们来介绍一下关于线程的另一个重点知识——线程安全。 一、线程安全 基本概念&#xff1a; 线程安全的确切定义是复杂的&#xff0c;但我们可以这样认为&…...

Python3 笔记:分支结构

Python 中选择结构&#xff1a;单分支选择结构、双分支选择结构、多分支选择结构。 1、if 语句是单分支选择结构&#xff0c;其语法形式如下&#xff1a; if 条件表达式: 语句块 如果条件表达式的值为真&#xff0c;即条件成立&#xff0c;语句块将被执行&#xff1b;否…...

《TAM》论文笔记(上)

原文链接 [2005.06803] TAM: Temporal Adaptive Module for Video Recognition (arxiv.org) 原文代码 GitHub - liu-zhy/temporal-adaptive-module: TAM: Temporal Adaptive Module for Video Recognition 原文笔记 What&#xff1a; TAM: Temporal Adaptive Module for …...

【Java的抽象类和接口】

1. 抽象类 1.1 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果 一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 以上代码中…...

今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)

软件课题&#xff1a;Python实现打印100内数学试题软件及开发过程 一、需求管理&#xff1a; 1.实现语言&#xff1a;Python 2.打印纸张&#xff1a;A4 3.铺满整张纸 4.打包成exe 先看效果&#xff1a; 1. 2.电脑打印预览 3.打印到A4纸效果&#xff08;晚上拍的&#x…...

【C++杂货铺】红黑树

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 红黑树的概念 &#x1f4c1; 红黑树的性质 &#x1f4c1; 红黑树节点的定义 &#x1f4c1; 红黑树的插入操作 &#x1f4c1; 红黑树和AVL树的比较 &#x1f4c1; 全代码展示 &#x1f4c1; 总结 &#x1f308;前言…...

css--控制滚动条的显示位置

各种学习后的知识点整理归纳&#xff0c;非原创&#xff01; ① direction属性 滚动条在左侧显示② transform:scaleY() 滚动条在上侧显示 正常的滚动条会在内容超出规定的范围后在区域右侧和下侧显示在有些不正常的需求下会希望滚动条在上侧和左侧显示自己没有想到好的解决方案…...

华为设备display查看命令

display version //查看版本信息 display current-configuration //查看配置详情 display this //查看当前视图有效配置 display ip routing-table //查看路由表 display ip routing-table 192.168.3.1 //查看去往3.1的路由 display ip interface brief //查看接口下ip信息 dis…...

自动攻丝机进出料激光检测 进料出料失败报警循环手动及关闭报警退出无限循环

/**************进料检测********************/ /***缺料无限次循环 手动退出 超时报警*******/ void check_Pon() // { zstatus0; //报警计数器归零 Signauto1; …...

2024年去除视频水印的5种方法

如果你从事电影剪辑或者视频编辑工作&#xff0c;你经常需要从优酷、抖音、TikTok下载各种视频片段……。 通常这些视频带有水印和字幕。一些免费软件如CapCut、canva、Filmora也会给你制作的视频打上水印&#xff0c;这些水印嵌入在视频内部。 2024年去除视频水印的5种方法 …...

怎么用电脑接收手机文件 用备忘录传输更舒服

在这个数字化时代&#xff0c;手机已经成为我们随身携带的“百宝箱”&#xff0c;里面装满了各种重要的文件、资料和信息。然而&#xff0c;有时我们需要在电脑上处理这些文件&#xff0c;比如编辑文档、制作PPT或是查看照片。那么&#xff0c;如何在电脑与手机之间实现文件的顺…...

微信小程序、uniapp密码小眼睛

直接上代码喔喔喔喔喔喔喔喔~~ <input name"username" password"{{passwordHideShow}}" placeholder-style"color:#bdbdbd" type"text"maxlength"20" value"{{passwordNumber}}" bindinput"passwordInput…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...