JavaWeb学习记录(六)——用户登录功能
使用JDBC、spring框架、servlet实现一个简单的用户登录功能。
一、mySql数据库
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`pass` varchar(15) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
二、连接数据库(jdbc+spring)
(1)c3p0-config.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 指定名称的配置 -->
<named-config name="oa">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/animal</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="maxPoolSize">100</property>
<property name="initialPoolSize">20</property>
<property name="minPoolSize">10</property>
<property name="acquireIncrement">5</property>
</named-config>
<!-- 缺省的配置 -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/animal</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="maxPoolSize">100</property>
<property name="initialPoolSize">20</property>
<property name="minPoolSize">10</property>
<property name="acquireIncrement">5</property>
</default-config>
</c3p0-config>
(2)工具类:
package blank.util;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBConn {
private static ComboPooledDataSource cpds=new ComboPooledDataSource("oa");
private DBConn(){}
public static DataSource getDataSource(){
return cpds;
}
public static Connection getConn() throws SQLException{
return cpds.getConnection();
}
public static void release(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn=null;
}
}
}
三、创建对应实体
blank.domain包中建立User.java
package blank.domain;
public class User {
private Integer id;
private String name;
private String pass;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(Integer id, String name, String pass) {
super();
this.id = id;
this.name = name;
this.pass = pass;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pass=" + pass + "]";
}
}
四、数据库操作接口
package blank.dao;
import blank.domain.User;
public interface UserDao {
User getUser(String name, String pass);
}
五、数据库操作的具体方法实现
package blank.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import blank.dao.UserDao;
import blank.domain.User;
import blank.util.DBConn;
public class UserDaoImpl implements UserDao{
private JdbcTemplate jdbcTemplate=new JdbcTemplate(DBConn.getDataSource());
@Override
public User getUser(String name, String pass) {
String sql="select id , name, pass from user where name=? and pass=?";
List<User> users=jdbcTemplate.query(sql, new Object[]{name,pass}, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int num) throws SQLException {
User u=new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPass(rs.getString("pass"));
return u;
}});
User user=null;
if(users!=null&&users.size()>0){
user=users.get(0);
}
return user;
}
}
说明:此处查询时不可使用单个个体查询的方式,否则当用户名不存在时会报错!
六、登录的jsp界面
(1)login.jsp:
<body>
<div style="text-align: center;">
${user}
<!-- ./login.do -->
<form action="./login.do" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="pass"/></td>
</tr>
<tr style="text-align: center;">
<td colspan="2"><input type="submit" value="登录"/></td>
</tr>
</table>
</form>
</div>
</body>
(2)sc.jsp:
<body>
欢迎登录
</body>
七、servlet控制层
package blank.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import blank.dao.PetDao;
import blank.dao.UserDao;
import blank.dao.impl.PetDaoImpl;
import blank.dao.impl.UserDaoImpl;
import blank.domain.Pet;
import blank.domain.User;
public class LoginServlet extends HttpServlet {
private UserDao userDao=new UserDaoImpl();
private PetDao petDao=new PetDaoImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter("name");
String pass=request.getParameter("pass");
User user=userDao.getUser(name, pass);
if(user!=null){
request.setAttribute("user", user);
List<Pet> pets=petDao.getObjects();
request.setAttribute("pets", pets);
request.getRequestDispatcher("/sc.jsp").forward(request, response);
}else{
request.setAttribute("user", "用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
八、结果展示
进入页面显示如下:
输入正确的用户名和密码后跳转至另一页面,显示如下:
输入错误的用户名或密码后留在登录页面不跳转,结果如下:
JavaWeb学习记录(六)——用户登录功能的更多相关文章
- Struts2整合Hibernate3实现用户登录功能
所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...
- 实现Web上的用户登录功能
关于如何实现web上的自动登录功能 文章来源http://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能 ...
- 你会做Web上的用户登录功能吗?
Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...
- 利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)
利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JS ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- tail -fn 1000 test.log | grep '关键字' 按照时间段 sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log /var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件
Linux 6种日志查看方法,不会看日志会被鄙视的 2020-02-11阅读 7.3K0 作为一名后端程序员,和Linux打交道的地方很多,不会看Linux日志,非常容易受到来自同事和面试官的嘲讽 ...
- 使用Struts1完成用户登录功能
1.Struts框架 框架(framework):就是一系列代码和开发模式的整合,使用框架后,所有开发人员都会按照框架提供的规范进行开发,使代码更容易维护和扩展. 使用框架的优点: 1) 易于维护 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
随机推荐
- 踏着前人的脚印学Hadoop——结构、重点
HDFS作为一个分布式文件系统,是所有这些项目的基础.分析好HDFS,有利于了解其他系统.由于Hadoop的HDFS和MapReduce是同一个项目,我们就把他们放在一块,进行分析. 如果把整个had ...
- android 定时器的使用
1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系 ...
- matlab代码 图像处理源码
非常不错的找图像处理源码的地方,源码搜搜. http://www.codesoso.com/Category.aspx?CategoryId=56
- Hash(哈希)
一.基本概念 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的 ...
- Vijos 1243 生产产品 (单调队列优化的动态规划)
题意:中文题.不说了. 注意一些地方,机器的执行过程是没有顺序的,而且每个机器可以用多次.第一次执行的机器不消耗转移时间K. 用dp[i][j]表示第i个机器完成第j个步骤的最短时间,sum[j][i ...
- (spring-第7回【IoC基础篇】)BeanDefinition的载入与解析&&spring.schemas、spring.handlers的使用
报错信息:Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http: ...
- 将byte[]数组数据转换为图片用于预览显示
假如服务器返回给你的图片信息是byte[] 然后你需要将起转换成图片显示到你的view中去: 按以下的步骤 1.将获取的byte数组保存 假如为temp[]; 2.将temp[]转化为bitmap,你 ...
- 微信 关闭手机微信内置浏览器的js
WeixinJSBridge.call('closeWindow');
- 微信Accesstoken通过xml文件方式保存
//获取accessToken public static AccessToken GetAccessToken() { string AppID = JobBase.GetConfParamValu ...
- C#不安全代码和Fixed
fixed 语句禁止垃圾回收器重定位可移动的变量. fixed 语句只在不安全的上下文中是允许的. Fixed 还可用于创建固定大小缓冲区. fixed 语句设置指向托管变量的指针,并在执行该语句期间 ...