首页 > 解决方案 > 使用 Tomcat servlet 管理简单的 SQL Server 数据库表

问题描述

我最近开始了一份新工作,我正在使用现有的程序并在以前的程序的基础上创建新的程序。医院的 IT 团队很小,所以看起来真的很自制(在我到达那里之前,他们没有版本控制工具)。

这些 servlet 正在工作,但在正确编码方面不是最先进的。例如它不是 MVC,HTML 部分在主类中。只需根据标准显示来自数据库的结果就足够了。

现在我需要管理一个数据库:显示结果、添加新行、编辑行。我很确定这是一个常见的需求,我应该能够找到一些教程或示例,但我没有。

MYTABLE
[id_config] [int] NULL,
[label] [varchar](150) NULL,
[activ] [int] NULL

有人可以帮助我吗?我现在应该使用 JSON(我认为)。问题是,我没有太多时间,所以我正在寻找一些非常简单(就我的需求而言)和直截了当的东西。

这是我们的一个 servlet 的示例

import java.io.*;
import java.util.*;
import java.sql.*;
 
import javax.servlet.*;
import javax.servlet.http.*;
 
import com.microsoft.sqlserver.jdbc.*;
 
import java.net.*;
import java.lang.Runtime;
import java.text.DateFormat;
import java.text.SimpleDateFormat ;
import java.time.Period;
import java.time.ZoneId;
import java.text.ParseException ;
 
 
public class monServletConfig extends HttpServlet {
 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        doPost(request, response) ;
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {   
// Connexion BDD
 
         GenerePageConfig (connexionBDD)
        }
 
 
        private void GenerePageConfig (HttpServletRequest request, HttpServletResponse response, Connection connexionBDD) throws Exception
    {
                id_config= request.getParameter("id_config");
        libelle = request.getParameter("libelle");
        actif=  request.getParameter("actif");
                if(bouton_valid==null)
            bouton_valid="";
 
 
// HTML page creation (not great right ?)
System.out.println("Debut HTML");
 
        out.println("<html><head>");
        out.println("<meta http-equiv='Content-type' content='text/html; charset=UTF-8'>");
 
        out.println("<meta name='viewport' content='width=device-width,initial-scale=1,user-scalable=no'>");
        out.println("<title>"+InfoGenerales+"</title>");
 
        out.println("<link rel='stylesheet' type='text/css' href='Formulaire.css'>");
        out.println("<link rel='stylesheet' type='text/css' href='https://datatables.net/media/css/site-examples.css?_=0db1cd38700c0cfcdc140c39a2ebc306'>");
        out.println("<link rel='stylesheet' type='text/css' href='https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css'>");
        out.println("<link rel='stylesheet' type='text/css' href='https://cdn.datatables.net/buttons/1.6.2/css/buttons.dataTables.min.css'>");
        out.println("<link rel='alternate' type='application/rss+xml' title='RSS 2.0' href='http://www.datatables.net/rss.xml'>");
 
        out.println("<script type=\"text/javascript\" src=\"../calendarDateInput.js\"></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://code.jquery.com/jquery-3.5.1.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/buttons/1.6.2/js/dataTables.buttons.min.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/buttons/1.6.2/js/buttons.flash.min.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/buttons/1.6.2/js/buttons.html5.min.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/buttons/1.6.2/js/buttons.print.min.js'></script>");
        out.println("<script type='text/javascript' language='javascript' src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js'></script>");       
        out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/plug-ins/1.10.19/sorting/datetime-moment.js'></script>");
 
        //paramétrage data tables
        // la ligne datatable.moment doit correspondre au format de la date dans la tableau pour pouvoir trier dessus.
        out.println("<script type='text/javascript' class='init'> $(document).ready(function() {  ");
        out.println("$.fn.dataTable.moment('DD/MM/YYYY');");                
        out.println("$('#tab_recap').DataTable( {");
        out.println("dom: 'Bfrtip',"); 
        out.println("paging: false,");      
        out.println("order: [[ 5, 'asc' ]], ");  // Indique la colonne qui sera triée par défaut
        out.println("buttons: ['copy', 'csv', 'excel', 'pdf', 'print'],");
        out.println("'language': {  'url': 'https://cdn.datatables.net/plug-ins/a5734b29083/i18n/French.json' } ");
        out.println(" } ); ");
        out.println(" } ); </script>");
 
        out.println("</head>");
        out.println("<body >");
 
               // zone de recherche
               out.println("<fieldset>");
               out.println("<div id='exForm'><form id='idform' method=post>");
               out.println("<label for='libelle '>libelle </label> <input id ='libelle ' type='text'  name='libelle '><br>");   
               out.println("</fieldset>");
 
        out.println("<input type='submit' class='button' value=\'Rechercher\' name=\'bouton_valid\'>");
        out.println("</form> </div>");
 
                if(!bouton_valid.equals("Rechercher")||libelle .equals("")) 
        {
                  // message
                }
                else
               {
                // DB request then storage in a tab:
 
                for(cptCol = 0; cptCol < nombreColonnes; cptCol++)
                {
                    out.println("<th>"+tab[0][cptCol]+"</th>");
                }
 
                out.println("</tr>");
                out.println("</thead>");
                out.println("<tbody>");
 
                for (int i = 1; i <= maxtab; i++) // parcours des lignes 
                {
                    out.println("<tr>");
                    for(cptCol = 0; cptCol < nombreColonnes; cptCol++)
                    {
                        out.println("<td>" + tab[i][cptCol] + "</td>");//lit
                    }
                    out.println("</tr>");
                }
 
                out.println("</tbody>");
                out.println("</table>");
                out.println("<br>");    
               }
 
        }
 
}

我真的希望有人能帮助我。

标签: javajsonsql-servertomcatservlets

解决方案


我不确定我有没有遇到你的问题,但如果你不想使用像 spring-framework 这样的现代 Web 框架,你可以通过简单的设计来处理 servlet。

首先开发一个 servlet 来处理所有的请求,也就是你的 DispatcherServlet,这个 servlet 读取请求的主体,这些请求的格式是 JSON 之类的,然后将它们转换为相关的 ObjectModel,然后通过一些请求参数,例如“dispatch " 和 "handler" 您可以检测到必须调用您自己的哪些处理程序或业务对象。“dispatch”参数用于查找方法名称。

编组返回对象并将其写入 servlet 中的响应 OutputStream。


推荐阅读