回到第一章:目录
2.4-使用idea开发javaWeb应用程序,实现了简单的java web程序,具有3个前端页面和一个后台登录接口,后台登录接口仅仅是打印了登录信息,没有做校验。
这节实现:后台登录接口,根据前端输入的用户名和密码,查询mysql数据库校验是否合法,合法则跳转到主页面,不合法则给出提示。
工程目录:
cmd登录mysql,use ztest数据库,查询user表:
use ztest;
select * from user;
数据库里有2个用户 :
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.13version>
dependency>
在com.my.site包下新建类:MySqlOperator
代码如下:
package com.my.site;
import java.sql.*;
public class MySqlOperator {
private static final String MYSQL_URL = "jdbc:mysql://localhost:3309/ztest?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC";
private static final String MYSQL_NAME = "root";
private static final String MYSQL_PASSWORD = "MySql@8022";
/**
* 根据用户名和密码检查是否合法用户,
* @param uname
* @param pwd
* @return
*/
public static boolean loginChecked(String uname,String pwd){
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PASSWORD);
Statement stt = conn.createStatement();
String sql = "select * from user where account='"+uname+"' and password = '"+pwd+"'";//这样写是有sql注入漏洞的,后面会用到
System.out.println(sql);
ResultSet rs = stt.executeQuery(sql);
while (rs.next()){
return true;
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return false;
}
}
package com.my.site;
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;
/**继承至HttpServlet,重写doPost方法,实现自定义的处理逻辑。
* "/login" 为访问路径*/
@WebServlet("/login")
public class LoginController extends HttpServlet {
/** req 携带了请求相关信息,包括各种配置和请求参数; resp:携带返回相关信息 */
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从请求对象中获取请求参数:uname、pwd是从前端login.html页面的loginForm表单提交过来的
String uname = new String(req.getParameter("uname").getBytes("ISO-8859-1"),"utf-8");
String pwd = new String(req.getParameter("pwd").getBytes("ISO-8859-1"),"utf-8");
System.out.println("输入的户名是:"+uname);
System.out.println("输入的密码是:"+pwd);
if(MySqlOperator.loginChecked(uname,pwd)){
// 设置返回类型
resp.setContentType("text/html;charset=UTF-8");
//跳转到主页面,并携带请求体,返回体对象。
req.getRequestDispatcher("main.jsp").forward(req,resp);
}else{
//校验失败则跳转到登录页面
req.getRequestDispatcher("login.html?check=false").forward(req,resp);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面title>
<link rel="stylesheet" type="text/css" href="css/my.css">
<script type="text/javascript" src="./js/my.js">script>
head>
<body>
<div id="main-container" >
<div id="div-header" >
<h3 style="margin-bottom:0;">欢迎进入我的网站h3>
hr>
<p>
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。——孟子
p>
div>
<div id="div-content" >
<img src="./pics/pic0.jpg" alt="" class="main-img">
<form id="loginForm" class="loginForm" action="login" method="post">
<p>户 名: <input id="uname" type="text" name="uname" />p>
<p>密 码: <input id="pwd" type="password" name="pwd" />p>
<input type="button" value="登录" onclick="check()"/>
form>
div>
div>
<script type="text/javascript">
//检查输入是否为非空
function check()
{
var uname = document.getElementById("uname").value;//获取输入的用户名的值
var pwd = document.getElementById("pwd").value;//获取输入的密码值
if(loginCheck(uname,pwd)){
//调用 js/my.js 中定义的方法,来检查输入是否非空
document.getElementById("loginForm").submit(); //输入不为空则跳转到主页面
}else{
alert("户名和密码不能空。");
return false;
}
}
//从url中获取参数
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){
return pair[1];}
}
return(false);
}
//判断参数是否为true,不为true则弹窗提示密码错误。
var bool = getQueryVariable("check");
if(bool == false){
alert("用户名或密码错误。");
}
script>
body>
html>
把
function toJsp()
{
window.location.href="login.html;
}
修改为:
function toJsp()
{
window.location.href="login.html?check=true";
}
百度下载:
链接:https://pan.baidu.com/s/1_OkPxUJ3nPZszpwlk9lPIQ
提取码:opcq
到此,一个简单的具有前端、后台和数据库的java web程序完成。后续将介绍测试工具对这个工程进行测试。