プログラミング中、あった問題 09

現在の型:2019-05-09 00:00:00
想定の型:2019年05月09日(木)00:00

String todo_text = rset.getString("todo_text");
todo_text = todo_text.replaceAll("(?i)(&)", "&");
todo_text = todo_text.replaceAll("(?i)(')", "'");
todo_text = todo_text.replaceAll("(?i)(\")", """);
todo_text = todo_text.replaceAll("(?i)(<)", "&lt;");
todo_text = todo_text.replaceAll("(?i)(>)", "&gt;");

String upload_date = rset.getString("upload_date");
upload_date = upload_date.replaceFirst("(?i)(-)", "年");
upload_date = upload_date.replaceFirst("(?i)(-)", "月");
upload_date = upload_date.replaceFirst("(?i)( )", "日");
upload_date = upload_date.substring(0,16);

int YEAR = Integer.parseInt(upload_date.substring(0,4));
int MONTH = Integer.parseInt(upload_date.substring(5,7));
int DATE = Integer.parseInt(upload_date.substring(8,10));
MONTH = MONTH-1;
DATE = DATE-1;

String[] week = new String[7];
week[0] = "日";
week[1] = "月";
week[2] = "火";
week[3] = "水";
week[4] = "木";
week[5] = "金";
week[6] = "土";

Calendar YEAR_MONTH_DATE = Calendar.getInstance();
YEAR_MONTH_DATE.set( Calendar.YEAR,YEAR );
YEAR_MONTH_DATE.set( Calendar.MONTH,MONTH );
YEAR_MONTH_DATE.set( Calendar.DAY_OF_MONTH,DATE );
int DAY_OF_WEEK = YEAR_MONTH_DATE.get( Calendar.DAY_OF_WEEK );

upload_date = upload_date.substring(5,11) + "(" + week[DAY_OF_WEEK]+ ")" + upload_date.substring(11,16);

 

今までのコードの改善方向


1.Encodeの部分がServletに移動します。

2.トランザクションの勉強、DataBaseで複数指令が確実に実行するためです。

3.caseの変数名をわかりやすくします。(Refactor)

4.DataBaseの接続確認機能を削除します。

5.無駄なサービスを削除します。(default value)

6.if...else if...else...確実にelseで終了します。

7.statusがbooleanで定義します。もしくは変数名をかわります。

8.一覧画面のディスプレイ機能がDataBaseのServletに移動します。

9.dogetとdopostの役割を理解します。

10.userとtodoのServletが分別します。

11.Encodeの機能がまとめてします。

12.for(string todo:todo_array)メソッドを使用します。

13.JSPServletの名前を変更します。

 


Servlet名を変更しました。


info.searchman.lesson.java_mysql.EditServlet -> user_todo.ModeServlet
info.searchman.lesson.java_mysql.EditServlet -> user_todo.UserBeans

(web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
<servlet-name>ModeServlet</servlet-name>
<servlet-class>user_todo.ModeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ModeServlet</servlet-name>
<url-pattern>/Mode</url-pattern>
</servlet-mapping>
</web-app>


JSPのurl-pattern修正
<form action="Edit" method="POST"> -> <form action="Mode" method="POST">

JSP名を変更しました。
add_list.jsp -> add_Todo.jsp
delete_ID.jsp -> delete_User.jsp
delete_list.jsp -> delete_Todo.jsp
edit_list.jsp -> edit_Todo.jsp


・caseの変数名を変わりました。
case "add_User"
case "delete_User"
case "delete_User_confirm"
case "change_password"
ase "change_password_save"
case "user_verification"
case "add_Todo"
case "add_Todo_database"
case "delete_Todo"
case "delete_Todo_database"
case "edit_Todo"
case "edit_Todo_database"
case "logout"


・DataBaseの接続確認機能を削除しました。

・新しいエラーメッセージを作成しました。(DataBase接続できません。)
(ModeServlet)
if (value.equals("disconnect")) {
status = "DataBase接続できません。";
message = "管理者に連絡してください。";
}

(UserBeans)
catch (SQLException sQLException) {
sQLException.printStackTrace();
var = "disconnect";
return var;
}


・アカウントを作成すると、default valueを追加する機能を削除しました。
String sql2 = "INSERT INTO `company_db`.`todo` (`user_id`, `todo_text`, `finished`, `created_date`, `upload_date`) VALUES ('"
+ id + "', '買い物する', '1', '" + time + "', '" + time + "')";


・全ての変数pwをpasswordに変更しました。


・dogetとdopost
GETの場合、URL内部にパラメータが組み込まれるので、ブラウザの履歴やキャッシュが残ります。
POSTは残らないので、機密性が高いと言えなくもありませんが、結局、パケットは平文で流れるので、機密性について考える場合は、どちらにしても別途、暗号化の仕組みを取り入れる必要があります。

URLを使ったので、dogetの部分は必要です。

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}


・if...else if...else...確実にelseで終了します。
elseを使う必要性がないので、全部のelse ifをifに変わりました。


・変数statusの使用
if (status.equals("成功しました") && mode.equals("user_verification")
|| status.equals("成功しました") && mode.equals("delete_Todo_database")
|| status.equals("成功しました") && mode.equals("add_Todo_database")
|| status.equals("成功しました") && mode.equals("edit_Todo_database"))

使用しない問題:認証機能が失効します。
booleanで定義する問題:全てのcaseが修正しなければなりません。そして、詳しいエラーメッセージがなくなります。
新しい変数を追加する問題:四つcaseの中に、全てのifがこの変数を使用しなければなりません。