1. 無料アクセス解析

プログラミングに没頭しているあるIT技術者の日々

プログラミングに関する技術やコードについて、日々思ったことを書いていくブログです。

自作プログラムStruts2.0 ?action.java

どうしようかずっと考えていたのですが、やっぱり公開することにしました。

というのも、このブログへ来る方はプログラミングに関するキーワードで来ている方が多いようなので、公開することで参考になる面があれば良いかなと思ったのです。

コード中の?の部分はカスタマイズして遊んでみて下さい(これだけでは勿論動きませんが)。

勿論このコード以外にもjspファイルやxmlファイルがあるのですがソースをそのまま載せる事が出来ない状態でどうしようか検討中です(これはちょっと無理かもしれないです)。

ちなみにこのプログラムは2007年末から2008年初頭にかけてIT業界に入るための面接で見せる為に作ったものです。

さらにもう一点、実はこれと動作が全く同じEJB3.0版もあるのでそちらも暇を見ながら載せていきます。

改めてソースを見て"現時点で一番"改良していきたいと思う点はSQLの部分をストアドプロシージャにしてサーバー上に置くことかな。

package ?.?;

import javax.naming.*;
import javax.sql.*;
import java.sql.*;
import org.apache.struts2.config.Result; //Resultアノテーションを使うのに必要

/*Resultアノテーションを使って次の遷移先を指定する
 このクラスは?.?パッケージに属しているので
 コンテキストルート直下にあるJSPを呼び出すには
 ファイル名の前に"/"を付ける*/
@Result("/kekka.jsp")
public class ?Action { //アノテーションを使う場合、クラス名は「****Action」としなければいけない

/*入力フォームから送られてきたパラメータは
     フィールドを宣言してセッターとゲッターを
 記述しておけば勝手に値がセットされる*/
private DataSource ds;
private Integer year;
private Integer month;
private Integer day;
private String kekka;
private String pattern1;
private String pattern2;

public Integer getYear() { return year; }

public void setYear(Integer year) {
this.year = year;
}

public Integer getMonth() { return month; }

public void setMonth(Integer month) {
this.month = month;
}

public Integer getDay() { return day; }

public void setDay(Integer day) {
this.day = day;
}

public String getKekka() { return kekka; }

public void setKekka(String kekka){
this.kekka = kekka;
}
public String getPattern1(){
return pattern1;
}
public void setPattern1(String pattern1){
this.pattern1 = pattern1;
}
public String getPattern2(){
return pattern2;
}
public void setPattern2(String pattern2){
this.pattern2 = pattern2;
}
public String execute(){ //デフォルトではメソッド名はexecuteで引数なしで戻り値の型はSringになる

try{
StringBuilder sb = new StringBuilder();
final int MONTHS = 12;
int a = day-1;

//リソースアノテーションが使えないので通常の方法でDBに接続
InitialContext ic = new InitialContext();
ds = (DataSource)ic.lookup("java:comp/env/jdbc/datasource");
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ? FROM ? WHERE ?="+year+" AND ?="+month);
rs.next();
a += rs.getInt(1);
if(a>=61){
a -= 60;
}
if(a>=1 && a<=10){
sb.append("?");
}else if(a>=11 && a<=20){
sb.append("?");
}
else if(a>=21 && a<=30){
sb.append("?");
}
else if(a>=31 && a<=40){
sb.append("?");
}
else if(a>=41 && a<=50){
sb.append("?");
}
else{
sb.append("?");
}
if(year%2==0){
sb.append("?");
}
else{
sb.append("?");
}
if(a>=1 && a<=10 && year%2==0 && year%MONTHS==2){
sb.append("?");
}else if(a>=1 && a<=10 && year%2==1 && year%MONTHS==3){
sb.append("?");
}else if(a>=11 && a<=20 && year%2==0 && year%MONTHS==0){
sb.append("?");
}else if(a>=11 && a<=20 && year%2==1 && year%MONTHS==1){
sb.append("?");
}else if(a>=21 && a<=30 && year%2==0 && year%MONTHS==10){
sb.append("?");
}else if(a>=21 && a<=30 && year%2==1 && year%MONTHS==11){
sb.append("?");
}else if(a>=31 && a<=40 && year%2==0 && year%MONTHS==8){
sb.append("?");
}else if(a>=31 && a<=40 && year%2==1 && year%MONTHS==9){
sb.append("?");
}else if(a>=41 && a<=50 && year%2==0 && year%MONTHS==6){
sb.append("?");
}else if(a>=41 && a<=50 && year%2==1 && year%MONTHS==7){
sb.append("?");
}else if(a>=51 && a<=60 && year%2==0 && year%MONTHS==4){
sb.append("?");
}else if(a>=51 && a<=60 && year%2==1 && year%MONTHS==5){
sb.append("?");
}else{
sb.append("");
}
setKekka(sb.toString()); //処理結果をStringに変換しセット
if(sb.toString().indexOf("?") != -1){ //sbの中に"?"という文字列が含まれているかを調べている
setPattern1("?.html");
}else if(sb.toString().indexOf("?") != -1){
setPattern1("?.html");
}else if(sb.toString().indexOf("?") != -1){
setPattern1("?.html");
}else if(sb.toString().indexOf("?") != -1){
setPattern1("?.html");
}else if(sb.toString().indexOf("?") != -1){
setPattern1("?.html");
}else{
setPattern1("?.html");
}
if(sb.toString().indexOf("?") != -1){
setPattern2("?.html");
}
}
catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
return "success"; //デフォルトではsuccessを返す
}
}


自作プログラムStruts2.0 | コメント:0 | トラックバック:0 |
| HOME |