プログラミング中、あった問題 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)(<)", "<");
todo_text = todo_text.replaceAll("(?i)(>)", ">");
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)メソッドを使用します。
・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がこの変数を使用しなければなりません。