关于MVC模式的简单解释

M Model,模型层,例如登录实例中,用于处理登录操作的类;

V View,视图层,用于展示以及与用户交互。使用html、js、css、jsp、jQuery等前端技术实现;

C Controller,控制器,接受视图层的请求,将请求跳转到对应的模型进行处理,模型层处理完毕后,再将结果返回给请求处。这里用Servlet实现控制器。

实现过程分析

用户再视图层输入用户名以及密码点击提交,向控制器发出请求

控制器(Servlet)接受请求,将接受到的用户名以及密码转给模型层

模型层依据用户名和密码在数据库中进行查询,将操作结果返回给控制器

控制器经过判断返回给用户登录结果。

代码实现

项目结构图

视图层实现(index.jsp)


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="LoginServlet" method="post">
Name:<input type="text" name="uname"><br>
Pass:<input type="password" name="upwd"><br>
<input type="submit" value="Login"><br>
</form>
</body>
</html>

控制器层实现(LoginServlet)


package com.ajy.Servlet; import com.ajy.Model.LoginDao;
import com.ajy.Entity.User; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter; //控制器层
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//处理post方式登录请求
request.setCharacterEncoding("utf-8");
String uname = request.getParameter("uname");
String upwd = request.getParameter("upwd");
User user = new User(uname,upwd); response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
int rs = LoginDao.Login(user);
if(rs==-1){
out.println("系统错误");
}else if(rs==0){
out.println("用户名或密码错误");
}else{
out.println("登录成功");
}
}
}

模型层实现(LoginDao)


package com.ajy.Model; import com.ajy.Entity.User; import java.sql.*; //模型层,用于处理登录操作
public class LoginDao {
private static String DBUname = "root";
private static String DBUpwd = "121181";
private static String URL="jdbc:mysql://localhost:3306/anjiyubase?&serverTimezone=UTC&useSSL=false"; public static int Login(User user){ Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int count = 0;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(URL,DBUname,DBUpwd);
pstmt = con.prepareStatement("select count(*) from users where uanme = ? and upwd = ?");
pstmt.setString(1,user.getUserName());
pstmt.setString(2,user.getUserPassword());
rs = pstmt.executeQuery();
if(rs.next()){
count = rs.getInt(1);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
return -1;
} catch (SQLException e) {
e.printStackTrace();
return -1;
}finally {
try {
if (rs!=null)rs.close();
if (pstmt!=null)pstmt.close();
if (con!=null)con.close();
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
} if (count==0){
return 0;
}else{
return 1;
}
}
}

用户实例(User)


package com.ajy.Entity; public class User {
private int id;
private String UserName;
private String UserPassword; public User(String UserName, String UserPassword){
this.UserName=UserName;
this.UserPassword=UserPassword;
} public User(int id, String UserName, String UserPassword){
this.id=id;
this.UserName=UserName;
this.UserPassword=UserPassword;
}
public String getUserName() {
return UserName;
} public void setUserName(String userName) {
UserName = userName;
} public String getUserPassword() {
return UserPassword;
} public void setUserPassword(String userPassword) {
UserPassword = userPassword;
}
}

web.xml中的内容


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.ajy.Servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
</web-app>

数据库

基于Servlet的MVC模式用户登录实例的更多相关文章

  1. mybatis 和servlet使用MVC实现用户登录,注册,退出

    普通实现: USerMapper.java: package com.bjsxt.mapper; import org.apache.ibatis.annotations.Param; import ...

  2. Django:用户登录实例

    Django:用户登录实例 一.源代码 1,login.html代码(登录界面): <!DOCTYPE html> <html lang="zh-CN"> ...

  3. SSH——基于BaseDao和BaseAction实现用户登录

           基于BaseDao和BaseAction实现用户登录  1. 首先修改login.jsp页面,点击登录按钮,提交表单 <a onclick="document.forms ...

  4. JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  5. Servlet——简单用户登录实例+http协议解析

    编写项目.用户登录系统1.0版本号 登录界面Servlet: package com.gavin.view; import java.io.IOException; import java.io.Pr ...

  6. MVC下用户登录状态校验的问题以及解决方案--------------Action全局过滤器的使用

    前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...

  7. Servlet Session MVC模式

    一   什么是Session 当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId). ...

  8. centos7 设置grub密码及单用户登录实例

    centos7与centos6在设置grub密码的操作步骤上有很大的差别,特此记录供以后查用 grub加密的目的: 防止不法分子利用单用户模式修改root密码 给grub加密可以采用明文或者加密的密文 ...

  9. [转载]MVC中单用户登录

    转自:http://www.cnblogs.com/firstcsharp/archive/2013/05/19/3087481.html 把下面这段代码放在登录用户验证以后:   //用户登录验证通 ...

随机推荐

  1. centos/linux/ubuntu在局域网上网

    前言:对于服务器来说,一般不会安装windowns系统,都是会安装类unix系统,在局域网或者在内网中,上网还是走代理上网 1.知道代理服务器的ip及端口 2.就两条命令 export  http_p ...

  2. 金蝶K/3 跟踪语句_业务单据

    跟踪语句_业务单据_BOM select * from t_TableDescription where Ftablename like '%ICBOM%' order by FFieldName o ...

  3. CodeForces 286E Ladies' Shop 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8781889.html 题目传送门 - CodeForces 286E 题意 首先,给你$n$个数(并告诉你$m$ ...

  4. get、put、post、delete含义与区别

    1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...

  5. CodeForces - 1013B And 与运算暴力

    题目链接: https://vjudge.net/problem/1735275/origin 基本思路: 本题思路比较简单,首先,我们知道 a & x = b, b & x = b; ...

  6. Flex核心属性整理

    main axis和cross axis的位置不一定是水平和垂直的,以flex-direction的值即为主轴方向 justify-content:主轴对齐方式 space-between:将多余空间 ...

  7. css样式的六种选择器

    css常用的选择器有: 1.标签选择器: 标签选择器,这种选择器影响范围大,建议尽量应用在层级选择器中. 如: *{margin:0;padding:0}   /* 影响所有的标签 */ div{co ...

  8. Python的numpy库中rand(),randn(),randint(),random_integers()的使用

    1.numpy.random.rand() 用法是:numpy.random.rand(d0,d1,…dn) 以给定的形状创建一个数组,并在数组中加入在[0,1]之间均匀分布的随机样本. 用法及实现: ...

  9. Vue(二十六)父子组件通信

    今天写了一个分页公共组件,就出现了父子组件通信的问题,今天来总结下我遇到的父子组件通信问题 一.子组件调取父组件的数据或方法 (1)props 想要把父组件的值,传到子组件中,使用props 比如你在 ...

  10. puppeteer 拦截页面请求

    原文链接 https://www.cnblogs.com/ajanuw/p/10324269.html Request Response page.setRequestInterception(tru ...