栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

零基础一文搞懂在Servlet框架下从代码到项目的全过程(代码阶段)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

零基础一文搞懂在Servlet框架下从代码到项目的全过程(代码阶段)

前期的准备工作和系统资源配置已经在上一篇博客讲到
https://blog.csdn.net/saha__/article/details/124739358?spm=1001.2014.3001.5501

1、本机内存项目实例(关闭程序数据丢失)

1.1创建文件,并从中央仓库导入相应的依赖包
依赖包:
1、servlet 3.1依赖包
2、jackson 2.13
项目文件
在main创建java包
在Java包里创建两个java文件
命名为MessageListServlet(拿到前端的参数写入内存)后端代码
AddMessageServlet(把内存中的数据反馈给前端)后端
在webapp文件目录底下创建meessage.html文件(前端代码)
还有两个普通的公共类
DBUtils(使用于jdbc编程)
StringUtils(判空)
运行时会使用到Tomcat运行
使用fiddlre进行抓包
也可以使用Postman模拟发送请求


接下来就是写代码 了,涉及到很多知识,就不一一介绍了,有数据库,jdbs编程、js、java、html

代码 MessageListServlet(拿到前端的参数写入内存)后端代码
import utils.StringUtils;

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;
import java.util.ArrayList;
import java.util.List;


@WebServlet("/message/add")
public class AddMessageServlet extends HttpServlet {
    public static List msgList = new ArrayList<>();


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int  result = -1;
        //得到前端参数并效验
        //1.getParameter获取通过http协议提交过来的数据.
        String from = req.getParameter("from");
        String to = req.getParameter("to");
        String msg = req.getParameter("msg");
        
        if(StringUtils.hasLength(from) && StringUtils.hasLength(to) &&
        StringUtils.hasLength(msg)){
            //将表白对象加入到集合里面
            AddMessageServlet.msgList.add(new Message(from,to,msg ));
            result = 1 ;

        }
        //将结果返回给前端setContentType方法用于设置发送到客户端的响应的内容类型
        resp.setContentType("text/html; charset = utf-8");
        resp.getWriter().println(result);


    }
}


class Message{
    private String from;
    private String to;
    private String msg;
    public Message(String from , String to , String msg){
        this.from = from ;
        this.to = to;
        this.msg = msg ;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }
}
AddMessageServlet(把内存中的数据反馈给前端)后端
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import lombok.SneakyThrows;
import utils.DBUtils;

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;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;


@WebServlet("/message/list")
public class MessageListServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List messagelist = AddMessageServlet.msgList;
        //将结果返回给前端setContentType方法用于设置发送到客户端的响应的内容类型
        resp.setContentType("application/json; charset = utf-8");
        ObjectMapper objectMapper = new ObjectMapper();
        resp.getWriter().println(objectMapper.writeValueAsString(messagelist));


    }
}
在webapp文件目录底下创建meessage.html文件(前端代码)



    
    
    
    表白墙
    
    


        

表白墙

输入后点击提交, 会将信息显示在表格中

谁:
对谁:
说什么:
公共类DBUtils
package utils;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.SQLError;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtils {
    private DBUtils(){
    }
    private static volatile MysqlDataSource mysqlDataSource;
    private static volatile Connection connection;

    private static MysqlDataSource getMysqlDataSource(){
        if(mysqlDataSource == null){
            synchronized (DBUtils.class){
                if(mysqlDataSource == null){
                    mysqlDataSource = new MysqlDataSource();
                    mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/MessageWall?character=utf8&useSSL=true");
                    mysqlDataSource.setUser("root");
                    mysqlDataSource.setPassword("12345678");

                }
            }
        }
        return mysqlDataSource;
    }

    public static Connection getConnection() {
        if (connection == null) { // 首次访问
            synchronized (DBUtils.class) {
                if (connection == null) {
                    try {
                        MysqlDataSource dataSource = getMysqlDataSource();
                        connection = (Connection) dataSource.getConnection();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    }
                }
            }
        }
        return connection;
    }
    //关闭资源的方法
    public static void close(ResultSet resultSet, PreparedStatement statement, Connection connection) throws SQLException{
        if (resultSet != null) {
            resultSet.close();
        }
        if (statement != null) {
            statement.close();
        }
    }
}

公共类StringUtils
package utils;

public class StringUtils {
    
    public static boolean hasLength(String str){
        return !(str == null || str.length() == 0);

    }
}
2、存储到数据库项目(关闭计算机数据不会丢失)

和前面的项目类似,只是需要连接数据库
创建数据库,在java包下创建
AddMessageServletV2(拿到前端的参数添加到数据库)后端代码
MessageListServletV2把数据库中的数据反馈给前端)后端
在webapp底下创建meessage-wallV2.html文件(前端代码)

创建数据库
set character_set_database=utf8;
set character_set_server=utf8;
create database if not exists MessageWall;
use MessageWall;
drop table if exists messages;
create table messages (`from` varchar(255), `to` varchar(255), `message` 
varchar(2048));
AddMessageServletV2(拿到前端的参数添加到数据库)后端代码
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import lombok.SneakyThrows;
import utils.DBUtils;
import utils.StringUtils;

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;
import java.util.ArrayList;
import java.util.List;


@WebServlet("/message/add2")
public class AddMessageServletV2 extends HttpServlet {

    @SneakyThrows
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int  result = -1;
        //得到前端参数并效验
        //1.getParameter获取通过http协议提交过来的数据.
        String from = req.getParameter("from");
        String to = req.getParameter("to");
        String msg = req.getParameter("msg");
        
        if(StringUtils.hasLength(from) && StringUtils.hasLength(to) &&
                StringUtils.hasLength(msg)){
            //将表白对象加入到集合里面
            //2.1得到Connection
            Connection connection = DBUtils.getConnection();
            String sql = "insert into messages(`from`,`to`,`message`) values(?,?,?)";
            PreparedStatement statement = (PreparedStatement) connection.prepareStatement(sql);
            statement.setString(1,from);
            statement.setString(2,to);
            statement.setString(3,msg);
            //执行执行器,并返回结果
            result = statement.executeUpdate();
            //关闭资源
            DBUtils.close(null, statement, connection);


        }
        //将结果返回给前端setContentType方法用于设置发送到客户端的响应的内容类型
        resp.setContentType("text/html; charset = utf-8");
        resp.getWriter().println(result);


    }
}

MessageListServletV2把数据库中的数据反馈给前端)后端
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.sun.corba.se.impl.oa.poa.ActiveObjectMap;
import lombok.SneakyThrows;
import utils.DBUtils;
import utils.StringUtils;

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;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;


@WebServlet("/message/list2")
public class MessageListServletV2 extends HttpServlet {

    @SneakyThrows
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //查询数据据库中的表白列表
        List list = new ArrayList<>();
        //1.得到Connection
        Connection connection = DBUtils.getConnection();
        //拼接sql,得到执行器
        String sql = "select * from messages";
        PreparedStatement statement = (PreparedStatement) connection.prepareStatement(sql);
        //执行sql,返回resultset 并循环将数据添加到list中
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()){
            String from = resultSet.getString("from");
            String to = resultSet.getString("to");
            String msg = resultSet.getString("message");

            list.add(new Message(from,to,msg));
        }
        //关闭资源
        DBUtils.close(resultSet,statement,connection);

        //将结果返回给前端setContentType方法用于设置发送到客户端的响应的内容类型
        resp.setContentType("application/json; charset = utf-8");
        ObjectMapper objectMapper = new ObjectMapper();
        resp.getWriter().println(objectMapper.writeValueAsString(list));


    }
}

在webapp底下创建meessage-wallV2.html文件(前端代码)




    
    
    
    表白墙——连接数据库版本
    
    



表白墙

输入后点击提交, 会将信息显示在表格中

谁:
对谁:
说什么:

点击配置好的Tomcat运行在浏览器中输入相应的地址即可访问
IDEA生成localhost:8080/maven-servlet/
加上HTML文件的名字meessage-wallV2.html即可访问
http://localhost:8080/maven-servlet/meessage-wallV2.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885718.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号