一、实践目的
- 先简单写一个用户登录的例子,整明白怎么html与数据库联系起来的,为查询自己数据库的界面做准备,为后续流程优化做准备。
二、步骤
1、创建项目、导入html页面,配置文件,jar包(右键添加为库)
2、创建数据库环境
CREATE DATABASE day17;
USE day17;
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(32) UNIQUE NOT NULL,
PASSWORD VARCHAR(32) NOT NULL
);
3、创建一个包cn.itcast.domain,创建类user
4、先写操作数据库,也创建一个包,cn.itcast.dao,创建类UserDao,提供login的方法;再创建一个包,包内放工具类JDBCUtils,使用的是Durid连接池,这样才可以java语句方便操作数据库。
5、写个测试类,测试一下能否查询数据库成功。
6、开始写核心部分,编写cn.itcast.web.servlet.LoginServlet的servlet类,处理来自html页面的数据请求,做出回应。
7、login.html中form表单的action路径的写法,虚拟目录+Servlet的资源路径,Tomcat做服务器接受来自客户端的连接。
/*****************************************************************************************************************************************/
8、前面已经实现了用户的基础登录功能,实现了html与数据库之间的简单交互,下面需要对程序上的一些优化,现在就是有username与password两个参数,假如servlet来了很多参数然后一个一个的封装user对象比较费事,便需要把步骤6中的封装user部分优化一下,采用beanutils封装user,以后来的100个参数也会自己完成封装。
代码
loginServlet.class
package cn.itcast.web.servlet;
import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
import cn.itcast.test.UserDaoTest;
import org.apache.commons.beanutils.BeanUtils;
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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、设置编码
req.setCharacterEncoding("utf-8");
/*//2、获取请求参数
String username= req.getParameter("username");
String password= req.getParameter("password");
//3、封装user对象
User loginuser=new User();
loginuser.setUsername(username);
loginuser.setPassword(password);*/
//2、获取请求参数(优化)
Map<String,String[]> map= req.getParameterMap();
//3、创建User对象
User loginuser=new User();
try {
BeanUtils.populate(loginuser,map);//使用BeanUtils封装
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4、调用UserDao的login方法
UserDao dao=new UserDao();
User user =dao.login(loginuser);
//5、判断user
if(user==null){
//登陆失败
req.getRequestDispatcher("/failServlet").forward(req,resp);//转发
}else{
//登录成功
//存储数据
req.setAttribute("user",user);
req.getRequestDispatcher("/successServlet").forward(req,resp);//转发
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doPost(req, resp);
this.doGet(req, resp);
}
}
SuccessServlet.class
package cn.itcast.web.servlet;
import cn.itcast.domain.User;
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 java.io.IOException;
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取request域中共享的user对象
User user=(User) req.getAttribute("user");
if (user != null) {
//给页面写一句话
//设置编码
resp.setContentType("text/html;charset=utf-8");
//输出
resp.getWriter().write("登录成功!" + user.getUsername());
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
FailServlet.class
package cn.itcast.web.servlet;
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 java.io.IOException;
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//给页面写一句话
//设置编码
resp.setContentType("text/html;charset=utf-8");
//输出
resp.getWriter().write("登录失败,用户名或密码错误");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
三、修改代码,查询自己创创建的库
1、自己设计的库
在数据库连接池配置文件中修改库名称
2、修改代码,Servlet部分
login.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>管理员登录</title>
</head>
<body>
<div class="container" style="width: 400px;">
<h3 style="text-align: center;">数据查询</h3>
<form action="/javaweb/loginServlet" method="post">
<div class="form-group">
<label for="sn">SN:</label>
<input type="sn" name="sn" class="form-control" id="sn" placeholder="请输入用户名"/>
<input class="btn btn btn-primary" type="submit" value="查询">
</div>
</form>
</div>
</body>
</html>
LoginServlet.class
package cn.itcast.web.servlet;
import cn.itcast.dao.UserDao;
import cn.itcast.dao.WeatherEquDao;
import cn.itcast.domain.User;
import cn.itcast.domain.WeatherEquipment;
import cn.itcast.test.UserDaoTest;
import org.apache.commons.beanutils.BeanUtils;
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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、设置编码
req.setCharacterEncoding("utf-8");
/*//2、获取请求参数
String username= req.getParameter("username");
String password= req.getParameter("password");
//3、封装user对象
User loginuser=new User();
loginuser.setUsername(username);
loginuser.setPassword(password);*/
//2、获取请求参数(优化)
Map<String,String[]> map= req.getParameterMap();
//3、创建User对象
WeatherEquipment WeaEquip=new WeatherEquipment();
try {
BeanUtils.populate(WeaEquip,map);//使用BeanUtils封装
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4、调用UserDao的login方法
WeatherEquDao dao=new WeatherEquDao();
WeatherEquipment WeaEquipSelect =dao.select(WeaEquip);
//5、判断user
if(WeaEquipSelect==null){
//查询失败
req.getRequestDispatcher("/failServlet").forward(req,resp);//转发
}else{
//查询成功
//存储数据
req.setAttribute("sn",WeaEquipSelect);
req.getRequestDispatcher("/successServlet").forward(req,resp);//转发
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doPost(req, resp);
this.doGet(req, resp);
}
}
SuccessServlet.class
package cn.itcast.web.servlet;
import cn.itcast.domain.User;
import cn.itcast.domain.WeatherEquipment;
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 java.io.IOException;
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取request域中共享的WeaEqu对象
WeatherEquipment WeaEqu=(WeatherEquipment) req.getAttribute("sn");
if (WeaEqu != null) {
//给页面写一句话
//设置编码
resp.setContentType("text/html;charset=utf-8");
//输出,创建库的语句或者创建库见csdn实践2
resp.getWriter().write("查询成功!" +"\r\n"+
"SN:" + WeaEqu.getSn() +
"时间:" +WeaEqu.getDatatime() +
"温度:" +WeaEqu.getAirtemperature()+
"湿度:"+ WeaEqu.getAirhumidity()+
"大气压:"+ WeaEqu.getAirpressure()+
"风速:"+ WeaEqu.getWindspeed()+
"风向:"+WeaEqu.getWinddirection()+
"经度:"+WeaEqu.getLongitude()+
"纬度"+WeaEqu.getLatitude()
);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
FailServlet.class
package cn.itcast.web.servlet;
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 java.io.IOException;
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//给页面写一句话
//设置编码
resp.setContentType("text/html;charset=utf-8");
//输出
resp.getWriter().write("查询失败");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
3、修改代码,数据库处理部分…Dao
WeatherEquDao.class
package cn.itcast.dao;
import cn.itcast.domain.User;
import cn.itcast.domain.WeatherEquipment;
import cn.itcast.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
/*
操作数据库中User表的类
*/
public class WeatherEquDao {
//声明一个JdbcTemplate对象公用下面的方法
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登录方法
* @param selectEqu
* @return
*/
public WeatherEquipment select(WeatherEquipment selectEqu) {
try {
//1、编写sql
String sql = "select * from weathertable where sn = ? ";
//2、调用query方法
WeatherEquipment WeatherEquS = template.queryForObject(sql,
new BeanPropertyRowMapper<WeatherEquipment>(WeatherEquipment.class), selectEqu.getSn());
return WeatherEquS;
} catch (DataAccessException e) {
e.printStackTrace();
return null;
}
}
}
WeatherEquipment.class
package cn.itcast.domain;
public class WeatherEquipment {
private String datatime;
private String sn;
private double airtemperature;
private double airhumidity;
private double airpressure;
private double windspeed;
private double winddirection;
private String longitude;
private String latitude;
public String getDatatime() {
return datatime;
}
public void setDatatime(String datatime) {
this.datatime = datatime;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public double getAirtemperature() {
return airtemperature;
}
public void setAirtemperature(double airtemperature) {
this.airtemperature = airtemperature;
}
public double getAirhumidity() {
return airhumidity;
}
public void setAirhumidity(double airhumidity) {
this.airhumidity = airhumidity;
}
public double getAirpressure() {
return airpressure;
}
public void setAirpressure(double airpressure) {
this.airpressure = airpressure;
}
public double getWindspeed() {
return windspeed;
}
public void setWindspeed(double windspeed) {
this.windspeed = windspeed;
}
public double getWinddirection() {
return winddirection;
}
public void setWinddirection(double winddirection) {
this.winddirection = winddirection;
}
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
@Override
public String toString() {
return "WeatherEquipment{" +
"datatime='" + datatime + '\'' +
", sn='" + sn + '\'' +
", airtemperature=" + airtemperature +
", airhumidity=" + airhumidity +
", airpressure=" + airpressure +
", windspeed=" + windspeed +
", winddirection=" + winddirection +
", longitude='" + longitude + '\'' +
", latitude='" + latitude + '\'' +
'}';
}
}
4、现象
查询成功