目录
1.1 连接数据库后,在idea中 通过快捷方式 自动导入实体类
2.2 在子工程下 添加webapp、pom.xml设置为 war的打包方式
3.2.1 在 webapp 下,新建“login.jsp”
3.2.2 在 web.xml 中, 对 login.jsp 进行配置
3.4 开始构建三层架构(servlet层、service层、dao层)
3.4.2.1 在自动写好的 UserServiceImpl.java 的基础上,进行代码编写
注意:一直抛异常 直到抛异常到servlet, 需要在servlet层 捕获异常 即:进行try catch处理
4.1 在idea中 运行代码之后,会自动 弹出浏览器 ,显示页面
1、建库、建表
1.1 连接数据库后,在idea中 通过快捷方式 自动导入实体类
pojo、entity均能代表 “实体类”
1.2 实体类代码
package com.by.pojo;
public class User {
private Integer id;
private String username;
private String password;
private String sex;
private Integer age;
private String address;
public User() {
}
public User(Integer id, String username, String password, String sex, Integer age, String address) {
this.id = id;
this.username = username;
this.password = password;
this.sex = sex;
this.age = age;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
2、idea中的准备工作
2.1 在父工程下 新建子工程
2.2 在子工程下 添加webapp、pom.xml设置为 war的打包方式
2.3 在父工程下的pom.xml中 添加依赖
2.3.1 mysql的依赖
利用命令行 查看mysql的版本号
<!--添加mysql的依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
2.3.2 jsp 的依赖
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
2.3.3 jstl 的依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
3、 idea中 主要的代码工作
3.1 封装jdbc
3.1.1 jdbc 的配置文件
#mysql8\u9A71\u52A8
driverClass = com.mysql.jdbc.Driver
#\u7528\u6237\u540D
username = root
#\u6570\u636E\u5E93\u5BC6\u7801
password = root
#\u6570\u636E\u5E93url
url = jdbc:mysql://localhost:3306/servlet?characterEncoding=UTF-8
3.1.2 建一个 util 包,里面new 类
package com.by.util;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class Config {
private static String username;
private static String password;
private static String url;
private static String driverClass;
static{
//特殊的 Hashtable
Properties prop = new Properties();
try {
//读取类路径下的配置文件
//返回的是“流”,给到变量“is”
InputStream is = Config.class.getClassLoader().getResourceAsStream("jdbc.properties");
//加载配置文件内容
prop.load(is);
//从里面拿数据
username = prop.getProperty("username");
password = prop.getProperty("password");
url = prop.getProperty("url");
driverClass = prop.getProperty("driverClass");
if (driverClass != null && url != null && username != null && password != null) {
//加载驱动
Class.forName(driverClass);
}
}catch(FileNotFoundException e){
throw new RuntimeException(e);
}catch(IOException e){
throw new RuntimeException(e);
}catch (ClassNotFoundException e){
throw new RuntimeException(e);
}
}
/**
* 获取连接
* @return java.sql.Connection
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
Connection con = null;
try{
con = DriverManager.getConnection(url,username,password);
}catch(Exception e){
e.printStackTrace();
}
return con;
}
/**
* 释放资源
* @param con
* @param stat
* @param res
* @throws SQLException
*/
public static void close(Connection con, Statement stat, ResultSet res) throws SQLException{
if(con != null){
con.close();
}
if(stat != null){
stat.close();
}
if(res != null){
res.close();
}
}
}
package com.by.util;
import java.sql.*;
/**
* 封装工具类
*/
public class JdbcUtils {
private static Connection con = null;
private static Statement st = null;
private static ResultSet rs = null;
private static PreparedStatement ps = null;
/**
* 通用更新封装
*
* @param sql sql语句
* @param params 传入多参,也可以以数组形式传入
* @return
* @throws SQLException
*/
public static int update(String sql, Object... params) throws SQLException {
int flag = 0;
try {
con = Config.getConnection();
ps = con.prepareStatement(sql);
for(int i=0; i<params.length; i++){
ps.setObject(i+1, params[i]);
}
System.out.println(ps.toString());
flag = ps.executeUpdate();
}catch (SQLException e){
e.printStackTrace();
}finally {
Config.close(con,ps,null);
}
return flag;
}
/**
* 通用查询
* @param sql
* @param params
* @return
* @throws SQLException
*/
public static ResultSet query(String sql, Object ...params) throws SQLException{
try{
con = Config.getConnection();
ps = con.prepareStatement(sql);
for(int i = 0; i<params.length; i++){
//把?替换成实际的参数
ps.setObject(i+1, params[i]);
}
System.out.println(ps.toString());
rs = ps.executeQuery();
}catch (Exception e){
e.printStackTrace();
}
return rs;
}
}
3.2 项目从“登录”开始
3.2.1 在 webapp 下,新建“login.jsp”
<%--
Created by IntelliJ IDEA.
User: 86150
Date: 2024/6/1
Time: 10:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>用户管理系统</h3>
<form method="post" action="login">
账号:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
3.2.2 在 web.xml 中, 对 login.jsp 进行配置
3.3 new 一个主页面的jsp ,即:main.jsp
3.4 开始构建三层架构(servlet层、service层、dao层)
3.4.1 servlet层
package com.by.servlet;
import com.by.pojo.User;
import com.by.service.UserService;
import com.by.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 注意:
* 一次只写一层
*
* web层:接受请求,控制跳转
*/
public class LoginServlet extends HttpServlet {
private UserService userService = new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try{
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = userService.login(username,password);
//控制跳转
if(user!=null){
//利用重定向
resp.sendRedirect("main.jsp"); //登录成功 去主页面
}else{
resp.sendRedirect("login.jsp"); //登录失败 去登录页面
}
}catch (Exception e){
e.printStackTrace();
}
}
}
3.4.2 service 层
3.4.2.1 在自动写好的 UserServiceImpl.java 的基础上,进行代码编写
3.4.2.2 处理报红代码
3.4.3 dao 层
dao抛异常了,service也要抛异常