目录
二、 IDEA开发环境配置及代码编写(共六步)
1. 输入地址:http://127.0.0.1:8080/xmm/student.html
3. 点击student.list会访问实现的StudentServlet类中的service方法,该方法会通过jdbc连接MySQL数据库执行下面4条SQL语句:
一、实现功能
基于IDEA进行简单的javaweb开发,主要实现Servlet的service方法,借助jdbc对MySQL进行删除表格、创建表格、新增记录、查询记录等功能。目的是为了熟悉并记录基础的javaweb开发。
下面分别从IDEA配置、目录结构、代码编写、项目演示等方面进行讲解。
版本:IEDA:2022.1; Tomcate:10.0.27; JDBC:mysql-connector-java-8.0.28.jar
二、 IDEA开发环境配置及代码编写(共六步)
- 第一步:IDEA中新增项目(我命名为javaweb),并新增一个模块module(我命名为servlet01),在module处鼠标右键,点击“add Framwork Support”,选择其中的“Web Application”,最终生成的工程文件目录结构符合JavaEE规范,该web目录如下图所示:
- 第二步:在src中新增package(我命名为com.bjpowernode.javaweb.servlet),在package中编写业务代码(实现Servlet接口,满足对MySQL数据库的增删改查功能),我这里命名为StudentServlet.class
package com.bjpowernode.javaweb.servlet;
import jakarta.servlet.Servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.ServletConfig;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
public class StudentServlet implements Servlet{
//Servlet接口共有5个方法,此处只实service业务方法
public void init(ServletConfig config) throws ServletException{
}
public void service(ServletRequest request,ServletResponse response)
throws ServletException , IOException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// 编写JDBC代码,连接数据库,查询所有学生信息。
Connection conn = null;
PreparedStatement ps = null;
Statement stmt = null;
ResultSet rs = null;
try{
// 注册驱动 (com.mysql.jdbc.Driver,这个已过时。)
// 新版本中建议使用:com.mysql.cj.jdbc.Driver驱动。
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
String url = "jdbc:mysql://localhost:3306/bjpowernode";
String user = "root";
String password = "******";
conn = DriverManager.getConnection(url,user,password);
// 3. 编写sql语句
String dropTable = "drop table if exists t_javaweb";
String createTable = "create table if not exists t_javaweb(" +
"student_id int," +
"student_name varchar(255)," +
"sex char(6)," +
"age int(3)," +
"email varchar(255)," +
"address varchar(255))";
String insertData = "insert into t_javaweb values(001, 'Kate', 'f', 17, 'Kate@edu.csu.cn', '输入了')";
String queryData = "select * from t_javaweb";
Statement st = conn.createStatement();
stmt = conn.createStatement();
//执行sql
//4. 执行sql
int row1 = st.executeUpdate(dropTable);
int row2 = st.executeUpdate(createTable);
int row3 = st.executeUpdate(insertData);
ps = conn.prepareStatement(queryData);
// 执行SQL
rs = ps.executeQuery();
// 处理查询结果集
while(rs.next()){
String no = rs.getString("student_id");
String name = rs.getString("student_name");
//System.out.println(no + "," + name);
out.print(no + "," + name + "<br>");
System.out.println("添加数据成功");
}
}catch(Exception e){
e.printStackTrace();
}finally{
// 释放资源
if(rs != null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(ps != null){
try{
ps.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn != null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
public void destroy(){
}
public String getServletInfo(){
return "";
}
public ServletConfig getServletConfig(){
return null;
}
}
- 第三步:在web.xml(第一步自动生成的web.xml文件,名称不得修改)中注册所实现的StudentServlet类,目的是为了将实现类的请求路径与Servlet对应起来, 当用户访问某路径的时候,就能请求该实现类。(即请求该路径,即调用该类)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>studentServlet</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.StudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>studentServlet</servlet-name>
<url-pattern>/servlet/student</url-pattern>
</servlet-mapping>
</web-app>
该配置含义如下(由下向上):首先通过servlet-mapping:当用户访问/servlet/student路径,就会找到名称为studentServlet的servlet。然后再根据servlet找到名称为studentServlet的class地址:com.bjpowernode.javaweb.servlet.StudentServlet。也就将将实现类的请求路径与Servlet对应起来了。每个实现类用不同的请求路径进行对应。
- 第四步:添加jdbc驱动包、servlet、jsp包。
- 在生成的web->WEB_INF文件夹中新增文件夹lib,将本地文件中的jdbc包(我这里是mysql-connector-java-8.0.28.jar),复制到该位置(不要复制可展开的jar包)
- 点击File->Project Structure->Modules->增加jsp-api.jar和servlet-api.jar包(这两个路径在本地tomcat服务器文件夹的->lib文件夹中)
- 第五步:利用超链接访问所实现的servlet业务代码。在在生成的web->WEB_INF文件夹中新增html文件(我命名为student.html),即产生一个student page页面,点击student list,即可实现:新增一张表,并增加数据,并读取增加的数据。这里路径名省略了ip地址和port号,其中项目名自定义为:/xmm(注意要与第六步统一)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>student page</title>
</head>
<body>
<!--这里的项目名暂时无法动态获取,先写死-->
<a href="/xmm/servlet/student">student list</a>
</body>
</html>
- 第六步:让IDEA工具关联Tomcat服务器,奖webapp部署到Tomcat服务器中。
- 点击Add Configuration
- 左上角+号,选择Tomcat Server->local
- 在弹出的页面中设置服务器Server的参数(基本上是默认)
- 在Deployment页面,点击+号
- 添加tomcat文件夹(不是本项目,而是tomcat所在文件夹)中的webapps->ROOT文件夹,作为“根”,那么自写的webapp就会部署到Tomcat服务器中(在Tomcat文件夹中,即部署到了服务器中)
- 点击“小铅笔”符号,添加tomcat文件中的webapps文件夹,那么自写的webapp就会部署到Tomcat服务器中(每次运行完文件,可以在out文件夹中看到)
- 将application context改为:/xmm,即本webapp的名字(注意要与第五步统一)
- 第七步:最终目录结构如下所示:
三、项目演示
1. 输入地址:http://127.0.0.1:8080/xmm/student.html
2. 展示设定页面
3. 点击student.list会访问实现的StudentServlet类中的service方法,该方法会通过jdbc连接MySQL数据库执行下面4条SQL语句:
//删除表t_javaweb
String dropTable = "drop table if exists t_javaweb";
//创建表t_javaweb
String createTable = "create table if not exists t_javaweb(" +
"student_id int," +
"student_name varchar(255)," +
"sex char(6)," +
"age int(3)," +
"email varchar(255)," +
"address varchar(255))";
//新增1条记录
String insertData = "insert into t_javaweb values(001, 'Kate', 'f', 17, 'Kate@edu.csu.cn', '输入了')";
//查询表t_javaweb中记录
String queryData = "select * from t_javaweb";
4. 结果返回:
1. 浏览器
2. Tomcat服务器
3. MySQL服务器
四、结束语
至此已经比较好的完成了,这个小demo,那么诸如后台管理系统之流的系统,都是基于这篇blog介绍的原理进行展开。只不过要考虑美观性、交互性以及系统性能等问题。这些问题的考虑及实现,留待后续介绍。
PS:需要项目代码的,在评论区留下邮箱号,看到之后会回复~