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

news2024/11/25 0:43:19

一、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();//实例化业务模型userCheck
		if(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");//发送一个重定向
		}
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1672764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下网络命令

目录 需求1-查看本机是否存在22端口解法1解法2解法3 需求2-查看其他主机是否存在22端口解法1解法2解法3 需求3-查看TCP连接解法1/2 需求4-统计80端口tcp连接次数解法 需求5-查看总体网络速度解法 需求6-查看进程流量解法 需求7-dns解法 需求8-traceroute到baidu解法 需求9-查看…

git仓库使用

git仓库是会限制空间大小限制的 git网络库的容量限制_github仓库大小限制-CSDN博客 git是用于管理github的工具 电脑左下角搜索git打开GitBash.exe 进入到要下载到本地的目录 下载到本地的文件不要更改&#xff01; 如果要使用请务必把文件复制到别的空间去再在这个别的空间…

centos7中查询Nacos的安装路径和配置信息如何查找?

在 CentOS 7 上查询 Nacos 的安装路径和配置信息通常涉及几个步骤。这些步骤主要依赖于你是如何安装 Nacos 的&#xff08;比如使用压缩包还是 Docker 等方式&#xff09;。下面是一些通用的方法来帮助你找到 Nacos 的安装路径和配置信息&#xff1a; 1. 查找 Nacos 的安装路径…

智能自助终端主板RK3288/RK3568在酒店前台自助机方案的应用,支持鸿蒙,支持免费定制

酒店前台自助机解决方案是一款基于自助服务终端&#xff0c;能够让客人通过简单的操作完成入住登记/退房的解决方案&#xff0c;大幅提高酒店的工作效率&#xff0c;提升客人体验&#xff0c;降低人力成本。 该方案解决了以下传统前台登记入住方式的痛点&#xff1a; 1、人流量…

elasticsearch 动态映射

文章目录 动态映射动态映射的弊端静态映射实战&#xff1a;映射创建后还可以更新吗 动态映射 动态映射的核心是在自动检测字段类型后添加新字段 哪些字段类型支持动态检测呢&#xff1f; 答&#xff1a;boolean类型、float类型、long类型、Object类型、Array类型、date类型、…

Hive-表设计优化

Hive-表设计优化 1.Hive查询基本原理 Hive的设计思想是通过元数据解析描述将HDFS上的文件映射成表。 基本的查询原理是当用户通过HQL语句对Hive中的表进行复杂数据处理和计算时&#xff0c;默认将其转换为分布式计算MapReduce程序对HDFS中的数据进行读取处理的过程。 当执行…

黑马甄选离线数仓项目day02(数据采集)

datax介绍 官网&#xff1a; https://github.com/alibaba/DataX/blob/master/introduction.md DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。 DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre…

48-Qt控件详解:Buttons Containers2

一 Group Box:组合框 #include "widget.h"#include<QGroupBox> #include<QRadioButton> #include<QPushButton> #include<QVBoxLayout>//可以在水平方向和垂直方向进行排列的控件&#xff0c;QHBoxLayout/QVBoxLayout #include <QGridLa…

Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

新增柱线组合图、象限图,新增钉钉、飞书、企业微信客户端免密登录,DataEase开源数据可视化分析工具v2.6.0发布

2024年5月13日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.6.0版本。 这一版本的功能升级包括&#xff1a;图表方面&#xff0c;新增了柱线组合图、象限图&#xff1b;仪表板方面&#xff0c;支持批量拖拽字段&#xff0c;外部参数新增支持配置过滤组件&…

云原生基础设施和操作系统分论坛 03-在Kubernetes上运行Apache Spark进行大规模数据处理的实践【数据分析】

https://spark.apache.org/视频观看&#xff1a;https://www.bilibili.com/video/BV17J4m1n7Gv/?spm_id_from333.999.0.0 简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop…

/proc/modules文件

/proc/modules文件中列出了内核加载的所有模块的信息&#xff0c;与使用lsmod命令类似。 第一列&#xff1a;模块名称 第二列&#xff1a;模块使用的内存大小&#xff0c;单位是bytes 第三列&#xff1a;模块被load的次数 第四列&#xff1a;是否有其他模块依赖此模块&#…

git使用及github

文章目录 操作命令基本组成框架在开发中git分支的重要性 github的使用将本地仓库关联到远程仓库将远程仓库关联到本地和拉取指定分支、切换远程分支提交本地仓库到远程仓库修改分支名称 保存当前工作切换分支将别的分支修改转移到自己的分支远程删除分支后本地git branch -a依然…

基于NTP服务器获取网络时间的实现

文章目录 1 NTP1.1 简介1.2 包结构1.3 UNIX 时间戳和NTP时间戳 2 代码实现2.1 实现步骤2.2 完整代码 3 结果 在某些场景下&#xff0c;单片机需要通过网络获取准确的时间进行数据同步&#xff0c;例如日志记录、定时任务等。然而&#xff0c;单片机本身无法直接获得准确的标准时…

Vue+springboot的批量删除功能

vue前台 <div style"margin-bottom: 10px"><el-button type"primary" plain click"handleAdd">新增</el-button><el-button click"delBatch" type"danger" plain style"margin-left: 5px"…

自学新标日第十三课(完结)

第十三课 单词 单词假名声调词义荷物にもつ1包裹はがきはがき0明信片切手きって0邮票引き出しひきだし0抽屉アルバムあるばむ0相册タバコたばこ0烟草漫画まんが&#xff10;ガレージ&#xff12;车库修理しゅうり&#xff11;生ビールなまビール3生啤焼き鳥やきとり0烤鸡肉串…

I. Integer Reaction

Problem - I - Codeforces 看到最小值最大值&#xff0c;二分答案。 思路&#xff1a;每次二分时开两个集合&#xff0c;分别表示 0 0 0颜色和 1 1 1颜色。如果是 c c c颜色&#xff0c;先将值存入 c c c颜色&#xff0c;之后在 ! c !c !c颜色中找大于等于 m i d − a mid - a…

a-auto-complete 请求后端数据做模糊查询,解决下拉框选择选不上,不回显的问题

a-auto-complete 请求后端数据做模糊查询&#xff0c;解决下拉框选择选不上&#xff0c;不回显的问题 记录一个a-auto-complete卡bug卡了两天&#xff0c;找不到哪里的问题下拉框选择选不上&#xff0c;不回显&#xff0c;最后终于解决了。 我还对下拉框显示的内容做了小调整。…

【简单探索微软Edge】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

人工智能引领工业园区智能化升级:AI视频监测助力安全生产管理

当前&#xff0c;许多工业园区面临着一个共同的挑战&#xff1a;大量的监控视频处于“沉睡”状态&#xff0c;无法主动预警风险&#xff0c;需要人工持续盯防。同时&#xff0c;由于生产现场工况复杂&#xff0c;高危场景的巡检工作不仅增加了人员的暴露频次&#xff0c;而且在…