问题遇到的现象和发生背景
使用servlet设计登录项目,无法正常登录
问题相关代码,请勿粘贴截图
验证码servlet
package com.leighy.emp.controller;
import cn.dsna.util.images.ValidateCode;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "CreateCodeController",value = "/createCode")
public class CreateCodeController extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ValidateCode validateCode = new ValidateCode(200,30,4,20);
String codes = validateCode.getCode();
HttpSession session = request.getSession();
session.setAttribute("codes",codes);
validateCode.write(response.getOutputStream());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
登录servlet
package com.leighy.emp.controller;
import com.leighy.emp.entity.EmpManager;
import com.leighy.emp.service.EmpManagerService;
import com.leighy.emp.service.impl.EmpManagerServiceImpl;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "EmpManagerLoginController",value = "/manager/EmpManagerLoginController")
public class EmpManagerLoginController extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.收参
String username = request.getParameter("username");
String password = request.getParameter("password");
String inputVcode = request.getParameter("inputVcode");
//2.校验验证码
String codes = (String)request.getSession().getAttribute("codes");
if(!inputVcode.isEmpty() && inputVcode.equalsIgnoreCase(codes)){
//调用业务逻辑实现登录
EmpManagerService empManagerService = new EmpManagerServiceImpl();
EmpManager empManager = empManagerService.login(username,password);
if(empManager!=null){
//登录成功
//存储在session作用域
HttpSession session = request.getSession();
session.setAttribute("empManager",empManager);
//跳转到查询所有的controller
response.sendRedirect(request.getContextPath()+"/manager/showAllEmpController");
}else {
response.sendRedirect(request.getContextPath()+"/login.html");
}
}else {
response.sendRedirect(request.getContextPath()+"/login.html");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
登录成功跳转展示数据库内容servlet
package com.leighy.emp.controller;
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(name = "ShowAllEmpController",value = "/manager/showAllEmpController")
public class ShowAllEmpController extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("登录成功!");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
dao包
package com.leighy.emp.dao.impl;
import com.leighy.emp.dao.EmpManagerDao;
import com.leighy.emp.entity.EmpManager;
import com.leighy.emp.utils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.SQLException;
public class EmpManagerDaolmpl implements EmpManagerDao {
QueryRunner queryRunner = new QueryRunner();
@Override
public EmpManager select(String username) {
try {
EmpManager empManager = queryRunner.query(DbUtils.getConnection(),"select * from empmanager where username = ?;",new BeanHandler<EmpManager>(EmpManager.class),username);
return empManager;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
}
package com.leighy.emp.dao;
import com.leighy.emp.entity.EmpManager;
public interface EmpManagerDao {
public EmpManager select(String username);
}
实体类
package com.leighy.emp.entity;
public class EmpManager {
private String username;
private String password;
public EmpManager() {
}
public EmpManager(String username, String password) {
this.username = username;
this.password = password;
}
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;
}
}
service应用层
package com.leighy.emp.service.impl;
import com.leighy.emp.dao.EmpManagerDao;
import com.leighy.emp.dao.impl.EmpManagerDaolmpl;
import com.leighy.emp.entity.EmpManager;
import com.leighy.emp.service.EmpManagerService;
import com.leighy.emp.utils.DbUtils;
public class EmpManagerServiceImpl implements EmpManagerService {
private EmpManagerDao empManagerDao = new EmpManagerDaolmpl();
@Override
public EmpManager login(String username, String password) {
EmpManager empManager = null;
try {
DbUtils.begin();
EmpManager temp = empManagerDao.select(username);
if(temp!=null){
if(temp.getPassword().equals(password)){
empManager = temp;
}
}
DbUtils.commit();
} catch (Exception e) {
DbUtils.rollback();
e.printStackTrace();
}
return null;
}
}
package com.leighy.emp.service;
import com.leighy.emp.entity.EmpManager;
public interface EmpManagerService {
public EmpManager login(String username,String password);
}
utils
package com.leighy.emp.utils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DbUtils {
private static DruidDataSource ds;
private static final ThreadLocal<Connection> THREAD_LOCAL = new ThreadLocal<>();
static {
Properties properties = new Properties();
InputStream is = DbUtils.class.getResourceAsStream("/database.properties");
try {
properties.load(is);
try {
ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection connection = THREAD_LOCAL.get();
try {
if(connection==null){
connection = ds.getConnection();
THREAD_LOCAL.set(connection);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
//开启事务
public static void begin(){
Connection connection = null;
try {
connection = getConnection();
connection.setAutoCommit(false);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public static void commit(){
Connection connection = null;
try {
connection = getConnection();
connection.commit();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
closeAll (connection,null,null);
}
}
public static void rollback(){
Connection connection = null;
try {
connection = getConnection();
connection.rollback();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
closeAll (connection,null,null);
}
}
public static void closeAll(Connection connection, Statement statement, ResultSet resultSet){
try {
if(resultSet != null){
resultSet.close();
}
if (statement!=null){
statement.close();
}
if(connection!=null){
connection.close();
THREAD_LOCAL.remove();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
database.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/emp?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
username=root
password=111111
initialSize=10
maxActive=20
minIdle=5
maxWait=3000
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="/empproject/manager/EmpManagerLoginController" method="post">
用户名:<input type="text" name="username"> <br/>
密码:<input type="password" name="password"> <br/>
验证码:<input type="text" name="inputVcode"><img src="/empproject/createCode"/> <br/>
<input type="submit" value="登录">
</form>
</body>
</html>
create database emp;
use emp;
create table empManager(
username varchar(20) not null,
password varchar(20) not null
)charset=UTF8;
insert into empManger(username,password) values('tom',123);
select * from empmanger;
运行结果及报错内容
能正确进入html界面,但输入数据库中数据时,无法完成正确跳转
输入正确数据
输入后还是弹回这个界面
我的解答思路和尝试过的方法
我想要达到的结果
正常登录,到showallempmanager中查看输出