J'aimerais écrire un article pour ceux qui écrivent des applications pour la première fois avec Java. Nous vous serions reconnaissants de bien vouloir l'utiliser comme référence pour créer des thèmes de formation pour votre portefeuille et votre entreprise. Cette fois, nous allons créer un gestionnaire de tâches. En appliquant cela, il peut également être utilisé pour créer des clones Twitter.
Je publierai des articles pour chaque fonction de l'application.
eclipse4.16.0 Tomcat9 Java11
Il s'agit d'un formulaire de saisie courant.
task-insert.jsp
<body>
<!-- header.jsp sera créé en dernier-->
<jsp:include page="header.jsp"/>
<div class="contain">
<h3>Enregistrement des tâches</h3>
<!-- task-insert-Passez chaque paramètre d'entrée au servlet-->
<form action="task-insert-servlet" method="post">
<table class="form-table" border="1">
<tbody>
<tr>
<th>Nom de la tâche</th>
<td>
<div class="input-key">
<input type="text" class="form-control" name="task_name" size="60" placeholder="Entrez s'il vous plait">
</div>
</td>
</tr>
<tr>
<th>Catégorie</th>
<td>
<div class="input-key">
<select class="form-control" name="category_id">
<option selected>Choose...</option>
<option value="1">Nouveau produit A: Projet de développement</option>
<option value="2">Produit existant B:Projet d'amélioration</option>
</select>
</div>
</td>
</tr>
<tr>
<th>Date limite</th>
<td>
<div class="input-key">
<input type="date" name="limit_date" class="form-control" size="60">
</div>
</td>
</tr>
<tr>
<th>statut</th>
<td>
<div class="input-key">
<select class="form-control" name="status_code" >
<option selected>Choose...</option>
<option value="00">pas encore commencé</option>
<option value="50">Début</option>
<option value="99">Terminé</option>
</select>
</div>
</td>
</tr>
<tr>
<th>Note</th>
<td>
<div class="input-key">
<input type="text" class="form-control" name="memo" size="60">
</div>
</td>
</tr>
<tr>
<th><input type="submit" value="enregistrement" class="input-submit"></th>
<td></td>
</tr>
</tbody>
</table>
</form>
</div>
</body>
Il s'agit de l'écran de confirmation lorsque l'enregistrement est terminé. Ici vous pouvez voir ce que vous publiez.
task-insert-comp.jsp
<body>
<%
String task_name = (String)request.getAttribute("task_name");
int category_id = (int)request.getAttribute("category_id");
String category_name = (String)request.getAttribute("category_name");
Date limit_date = (Date)request.getAttribute("limit_date");
String status_code = (String)request.getAttribute("status_code");
String status_name = (String)request.getAttribute("status_name");
String memo = (String)request.getAttribute("memo");
%>
<jsp:include page="header.jsp"/>
<div class="contain">
<div class="box">
<h3>L'enregistrement de la tâche est terminé</h3>
<p>Je me suis inscrit avec le contenu suivant</p>
<hr>
<p>
Nom de la tâche:<%=task_name %><br>
Catégorie:<%=category_id %>:<%=category_name %><br>
Date limite:<%=limit_date %><br>
statut:<%=status_code %>:<%=status_name %><br>
Remarque:<%=memo %><br>
</p>
<a href="menu.jsp">Retour au menu</a>
</div>
</div>
</body>
Ceci est l'affichage lorsque la publication échoue. En particulier, dans le cas d'une erreur de saisie, l'emplacement où l'erreur s'est produite est affiché.
task-insert-failure.jsp
<body>
<!--L'erreur d'étendue de la demande répertorie les raisons pour lesquelles l'entrée était incorrecte, alors recevez ceci-->
<%
List<String> error = (List<String>)request.getAttribute("error");
%>
<jsp:include page="header.jsp"/>
<div class="contain">
<div class="box">
<h3>Échec de l'enregistrement de la tâche</h3>
<hr>
<p>*Les causes suivantes sont possibles</p>
<ul>
<!--Erreur d'affichage-->
<%for(String er : error){ %>
<li><%=er %></li>
<%} %>
</ul>
<a href="task-insert.jsp">Revenir à l'écran d'inscription</a>
</div>
</div>
</body>
Commencez par créer une méthode d'enregistrement des tâches.
model.dao.TaskDAO.java
/**
*Méthode d'enregistrement des tâches
* @param task_name
* @param category_id
* @param limit_date
* @param user_id
* @param status_code
* @param memo
* @return Nombre d'exécutions
* @throws SQLException
* @throws ClassNotFoundException
*/
public int insertTask(String task_name, int category_id, Date limit_date, String user_id, String status_code, String memo) throws SQLException, ClassNotFoundException {
//Paramètres d'entrée et utilisateur de l'instruction SQL_Créer un enregistrement en spécifiant un identifiant
String sql = "insert into t_task (task_name, category_id, limit_date, user_id, status_code, memo) values(?, ?, ?, ?, ?, ?)";
int sum = 0;
//Se connecter à la base de données
try(Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)){
pstmt.setString(1, task_name);
pstmt.setInt(2, category_id);
pstmt.setDate(3, limit_date);
pstmt.setString(4, user_id);
pstmt.setString(5, status_code);
pstmt.setString(6, memo);
//Exécution de l'instruction SQL de mise à jour
sum = pstmt.executeUpdate();
}
return sum;
}
L'explication détaillée est la même que dans la partie 2 UserDAO.java. Je souhaite afficher le nom du statut car il est facile à comprendre uniquement par l'identifiant du statut. Utilisons donc une méthode pour obtenir status_name avec status_id comme argument
model.dao.StatusDAO.java
public class StatusDAO {
/**
*Méthode pour obtenir le nom du statut
* @param status_code
* @return
* @throws SQLException
* @throws ClassNotFoundException
*/
public String getStatusName(String status_code) throws SQLException, ClassNotFoundException {
String sql = "select status_name from m_status where status_code = ?";
String status_name ="inconnue";
try(Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)){
pstmt.setString(1, status_code);
ResultSet res = pstmt.executeQuery();
while(res.next()) {
status_name = res.getNString("status_name");
}
}
return status_name;
}
}
L'explication détaillée est la même que dans la partie 2 UserDAO.java. Je souhaite afficher le nom du statut car il est facile à comprendre uniquement avec la catégorie Code. Utilisons donc une méthode pour obtenir nom_catégorie avec code_catégorie comme argument
model.dao.CategoryDAO.java
public class CategoryDAO {
/**
*Méthode pour obtenir le nom de la catégorie
* @param category_id
* @return
* @throws SQLException
* @throws ClassNotFoundException
*/
public String getCategoryName(int category_id) throws SQLException, ClassNotFoundException {
String sql = "select category_name from m_category where category_id = ?";
String category_name ="inconnue";
try(Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)){
pstmt.setInt(1, category_id);
ResultSet res = pstmt.executeQuery();
while(res.next()) {
category_name = res.getNString("category_name");
}
}
return category_name;
}
servlet.TaskInsertServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//Génération DAO
TaskDAO taskdao = new TaskDAO();
CategoryDAO categorydao = new CategoryDAO();
StatusDAO statusdao = new StatusDAO();
//Obtenir les paramètres
request.setCharacterEncoding("UTF-8");
String task_name = request.getParameter("task_name");
String category_id_str = request.getParameter("category_id");
String limit_date_check = request.getParameter("limit_date");
String status_code = request.getParameter("status_code");
String memo = request.getParameter("memo");
//Obtenir les informations sur l'utilisateur connecté à partir de l'étendue de la session et utiliser l'utilisateur_Obtenir l'identifiant
HttpSession session = request.getSession();
String user_id = (String)session.getAttribute("current_user_id");
//Génération de liste pour enregistrer l'affichage des erreurs
List<String> error = new ArrayList<String>();
//vérification de session
boolean sessioncheck = (boolean)session.getAttribute("login");
if(!sessioncheck) {
error.add("Veuillez vous connecter et enregistrer la tâche");
}
//Vérifier les omissions d'entrée
if(task_name.equals("")) {
error.add("Le nom de la tâche est vide");
}
if(category_id_str.equals("Choose...")) {
error.add("Aucune catégorie sélectionnée");
}
if(status_code.equals("Choose...")) {
error.add( "Aucun statut sélectionné");
}
//Date limite (limite)_date) est spécial car il s'agit d'un type Date
boolean limit_check;
limit_date_check = limit_date_check.replace('-', '/');
DateFormat format = DateFormat.getDateInstance();
format.setLenient(false);
try {
format.parse(limit_date_check);
limit_check = true;
} catch(Exception e) {
limit_check = false;
}
if(!limit_check) {
error.add("Veuillez saisir la date de la date limite");
}
//Enregistrer l'erreur pour demander l'étendue
request.setAttribute("error", error);
if(task_name != "") {
try {
//Convertit les catégories et les délais (type non String) qui ne peuvent pas être reçus selon les paramètres
int category_id = Integer.parseInt( category_id_str);
Date limit_date = Date.valueOf(request.getParameter("limit_date"));
//Traitement de la base de données par méthode d'insertion
taskdao.insertTask(task_name, category_id, limit_date, user_id, status_code, memo);
//Obtenir le nom de la catégorie / le nom du statut
String category_name = categorydao.getCategoryName(category_id);
String status_name = statusdao.getStatusName(status_code);
//Enregistrer les informations d'enregistrement pour demander l'étendue
request.setAttribute("task_name", task_name);
request.setAttribute("category_id", category_id);
request.setAttribute("category_name", category_name);
request.setAttribute("limit_date", limit_date);
request.setAttribute("status_code", status_code);
request.setAttribute("status_name", status_name);
request.setAttribute("memo", memo);
RequestDispatcher rd = request.getRequestDispatcher("task-insert-comp.jsp");
rd.forward(request, response);
} catch(SQLException | ClassNotFoundException | IllegalArgumentException e) {
RequestDispatcher rd = request.getRequestDispatcher("task-insert-failure.jsp");
rd.forward(request, response);
}
}else {
RequestDispatcher rd = request.getRequestDispatcher("task-insert-failure.jsp");
rd.forward(request, response);
}
}
Cette fois, j'ai implémenté la fonction d'enregistrement des tâches La prochaine fois, j'essaierai d'afficher une liste de tâches enregistrées, d'ajouter une fonction de tri et d'ajouter une fonction de recherche.
Recommended Posts