目录
1、建库、建表
1.1 连接数据库后,在idea中 通过快捷方式 自动导入实体类
1.2 实体类代码
2、idea中的准备工作
2.1 在父工程下 新建子工程
2.2 在子工程下 添加webapp、pom.xml设置为 war的打包方式
2.3 在父工程下的pom.xml中 添加依赖
2.3.1 mysql的依赖
2.3.2 jsp 的依赖
2.3.3 jstl 的依赖
3、 idea中 主要的代码工作
3.1 封装jdbc
3.1.1 jdbc 的配置文件
3.1.2 建一个 util 包,里面new 类
3.2 项目从“登录”开始
3.2.1 在 webapp 下,新建“login.jsp”
3.2.2 在 web.xml 中, 对 login.jsp 进行配置
3.3 new 一个主页面的jsp ,即:main.jsp
3.4 开始构建三层架构(servlet层、service层、dao层)
3.4.1 servlet层
3.4.2 service 层
3.4.2.1 在自动写好的 UserServiceImpl.java 的基础上,进行代码编写
3.4.2.2 处理报红代码
3.4.3 dao 层
注意:一直抛异常 直到抛异常到servlet, 需要在servlet层 捕获异常 即:进行try catch处理
3.5 选择所要运行的 子工程
4、运行
4.1 在idea中 运行代码之后,会自动 弹出浏览器 ,显示页面
4.2 输入内容 点击登录后 显示:
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也要抛异常