Jsp&Servlet用户登录功能实现(采用MVC模式)

我们使用Jsp&Servlet开发一个用户登录功能的小项目(麻雀大小,但是五脏俱全呦,关键是技术问题!)。

数据库:mysql

驱动包为 mysql-connector-java-3.1.12-bin.jar(下载链接:链接: https://pan.baidu.com/s/1_MlQONkdr5l1nKtO8OZCPQ 提取码: 442t)

驱动包放置在 HeadFirstJspServlet05/com.java1234.model/WeebContent/WEB-INF/lib下

开发工具:eclipse

客户端:Chrome浏览器

系统架构:  

①在com.java1234.model下是User模型;

在User类中 属性有id,userName,password;

主要作用是建立一个基础用户(id,用户名,密码(没有涉及加密,以后会更新,打算采用MD5加密))的模型。

代码如下:

 package com.java1234.model;
public class User {
private int id;
private String userName;
private String password; public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
} public User() {
super();
// TODO Auto-generated constructor stub
} 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 int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
}

User.java

②在com.java1234.util下是建立的DbUtil模型,主要是连接数据库用的。

这部分代码需要加强记忆;

其实细分也很简单的,主要存在的知识要点:

数据库链接地址dbUrl="jdbc:mysql://localhost:3306/db_jsp"(数据库名字);

数据库驱动:jdbcName="com.mysql.jdbc.Driver";

数据库名称:dbUserName="root";

数据库密码:dbpassword="123456";

数据库连接getcon()方法,数据库关闭closecon()方法;

代码如下:

package com.java1234.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DbUtil {
private String dbUrl="jdbc:mysql://localhost:3306/db_jsp";//数据库链接地址
private String dbUserName="root";//数据库用户名称
private String dbPassword="123456";//数据库密码
private String jdbcName="com.mysql.jdbc.Driver";//jdbc驱动
public Connection getcon() throws Exception{
Class.forName(jdbcName);//反射实例化jdbc驱动包
Connection con
=DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
return con;
}
public void closeCon(Connection con) throws Exception{
if(con !=null){
con.close();
}
}
public static void main(String[] args) {
DbUtil dbutil=new DbUtil();
try {
Connection con=dbutil.getcon();
System.out.println("数据库连接成功!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

DbUtil..java

数据库表为:

t_user :

③在com.java1234.dao下建立的Dao模型,主要是对User模型进行操作。

主要操作login()方法(主要是获取数据库数据String sql=”SELECT * from t_user where userName =? and password=?”; )

-----> PrepareStatement pstmt = prepareStatement(sql)

----> 对第1个参数和第2个参数进行设置

pstmt.setString(1, user.getUserName()); pstmt.setString(2, user.getPassword());

----->执行数据库查询指令 ResultSet rs=pstmt.executeQuery();

代码如下:

 package com.java1234.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.java1234.model.User;
public class Userdao {
public User login(Connection con,User user) throws Exception{
User resultUser=null;
String sql="SELECT * from t_user where userName=? and password=? ";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassword());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
resultUser=new User();
resultUser.setUserName(rs.getString("userName"));
resultUser.setPassword(rs.getString("passWord"));
}
return resultUser;
}
}

Userdao.java

④com.java1234.web下的LoginServlet.java 进行后端处理,主要将前端页面的数据传到后端。(还有验证功能,对数据库中不存在的数据会进行判错,error 并且在前端页面输出)

代码如下:

 package com.java1234.web;
import java.io.IOException;
import java.sql.Connection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import com.java1234.dao.Userdao;
import com.java1234.model.User;
import com.java1234.util.DbUtil; public class LoginServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
DbUtil dbutil=new DbUtil();
Userdao userdao=new Userdao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request,response);
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String userName=request.getParameter("userName");
String password=request.getParameter("password");
Connection con=null;
try {
User user=new User(userName,password);
con=dbutil.getcon();
User currentuser = userdao.login(con,user);
if(currentuser == null){
request.setAttribute("error", "用户名或者密码错误");
request.setAttribute("userName", userName);
request.setAttribute("password", password);
request.getRequestDispatcher("Login.jsp").forward(request, response);
}else{
HttpSession session=request.getSession();
session.setAttribute("currentuser", currentuser);
response.sendRedirect("main.jsp");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

LoginServlet.java

涉及技术要点:

RequestDispatcher接口 服务器跳转... 参考博客(博客写的确实好!)

https://www.cnblogs.com/lulipro/p/7471987.html

⑤jsp页面,我们可以看到是一个简单的用户登录功能的实现。

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!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>target-redirect</title>
<script type="text/javascript">
function resetInfo(){
document.getElementById("userName").value="";//document操纵html文档内容。
document.getElementById("password").value="";
}
</script>
</head>
<body>
<form action="login" method="post">
<h4>用户登录</h4>
<table>
<tr>
<td>用户名:</td>
<td><input type="text" id="userName" name="userName" value="${userName}"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="password" name="password" value="${password}"></td>
</tr>
<tr>
<td><input type="submit" value="登录"/></td>
<td colspan="2"><input type="button" value="重置" onclick="resetInfo()"/>
<font color="red">${error}</font>
</td> </tr>
</table>
</form>
</body>
</html>

Login.jsp

涉及的技术点:

  1. javascript脚本: document.getElementById(" ").

    每个载入浏览器的 HTML 文档都会成为 Document 对象。

    Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

  2.  value="${userName}";el表达式

界面:

登录界面:

报错处理:

重置:

登陆成功:

小 项 目 就 此 ok!

Servlet开发(2)的更多相关文章

  1. java web学习总结(五) -------------------servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  2. javaweb学习总结(五)——Servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  3. Servlet开发详解

    一.Servlet简介 Servlet是sun公司提供的一门用于动态web资源的技术 sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源,需要完成两个步骤: 编写一个J ...

  4. JavaWeb---总结(六)Servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  5. javaWeb中servlet开发(5)——WEB开发模式:Mode I与Mode II

    1.servlet开发 2.model I模式 客户端通过访问JSP,调用里面的javabean,而通过javabean调用处理数据库的操作,javabean中有专门处理数据库的操作,数据库主要以DA ...

  6. javaweb学习之Servlet开发(二)

    javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...

  7. Servlet开发配置

    本文主要简单实践一下servlet开发相关开发 1.Servlet的创建 两种方法: 创建普通的java类,继承自HttpServlet类,在通过手动配置web.xml文件注册Servlet对象,比较 ...

  8. javaWeb中servlet开发——过滤器

    servlet开发--过滤器(filter) servlet有三种,分为简单servlet.过滤器servlet.监听servlet 简单servlet是作为一种程序所必须的开发结构保存的,继承htt ...

  9. java web 学习五(servlet开发1)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  10. javaweb学习总结二十一(servlet开发入门、servlet生命周期以及调用过程)

    一:servlet开发入门 servlet是sun公司一门开发动态web资源的技术,下面编写一个servlet入门程序: 1:在tomcat服务器webapps目录下新建firstServlet目录, ...

随机推荐

  1. Spring注解驱动开发之Ioc容器篇

    前言:现今SpringBoot.SpringCloud技术非常火热,作为Spring之上的框架,他们大量使用到了Spring的一些底层注解.原理,比如@Conditional.@Import.@Ena ...

  2. 聊聊mq中消息消费的几种方式

    mq系列文章 对mq了解不是很多的,可以看一下下面两篇文章: 聊聊mq的使用场景 聊聊业务系统中投递消息到mq的几种方式 聊聊消息消费的几种方式 如何确保消息至少消费一次 如何保证消息消费的幂等性 本 ...

  3. 文件及文件的操作-读、写、追加的t和b模式

    1.什么是文件? 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位. 文件的操作核心:读和写 对文件进行读写操作就是向操作系统发出指令,操作系统将用户或者应用程序对文件的读写操作转换为具体的 ...

  4. [BZOJ4815][CQOI2017]小Q的表格 数论+分块

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4815 题目中所给条件中的$(a,a+b)$和$(a,b)$的关系很瞩目. 然后大家都知道$ ...

  5. div根据鼠标的移入移除显示隐藏

    onmouseout  是把div当成一个对象,div里面包含的元素当成别的对象,所以移动的时候,会隐藏,达不到我们预期的效果. onmouseleave 就是把整个div当成一个对象. 大家可以去试 ...

  6. Matlab中size、numel、length、fix函数的使用

    size():获取矩阵的行数和列数  (1)s=size(A),      当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size ...

  7. 慎将MBTI测试用于招聘或就业:4星|《人格魅力修炼指南》

    人格魅力修炼指南:成为理想中的自己,就靠它了!(<哈佛商业评论>增刊) <哈佛商业评论>的11篇领导者人格魅力相关的文章.比较专业. 一些重要的信息:慎将MBTI测试用于“招聘 ...

  8. pythno学习小结-替换python字典中的key值

    源: d={'a':1,'b':2,'c':3} 目标:key:'b'替换为'e' d={'a':1,'e':2,'c':3} 方法: d['e']=d.pop('b')

  9. 使用Let's Encrypt 生成免费的ssl证书的详细过程

    参考连接:https://github.com/diafygi/acme-tiny 中文:https://hacpai.com/article/1487899289204 目前我了解可以生成免费证书的 ...

  10. 在Gitlab上怎么添加ssh key

    原因分析: 某台centos没有权限克隆gitlab上的git项目,没有权限,报错信息如下 我首先想到的是,在gitlab上没有添加这台centos服务器的秘钥,导致没有权限拉取项目信息 解决步骤: ...