- PR -

Strutsを使わないMVC方法を教えてください。

投稿者投稿内容
ひろ
会議室デビュー日: 2005/03/08
投稿数: 13
お住まい・勤務地: 京都
投稿日時: 2005-04-26 19:02
お返事遅くなって申し訳ないです。

ServletはEEまで理解できています。
既に色々構築しました。
独自クラスもDAOも有ります。

ただ単にコントローラー部分だけを作れと言われただけなんです(涙
条件としては「Strutsを使わずに」ってことなんです;;

ややこしい書き込みをしてしまって申し訳ないです・・・。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2005-04-26 20:16
引用:
ServletはEEまで理解できています。


やっぱり理解できてない気がします。
引用:
ただ単にコントローラー部分だけを作れと言われただけなんです(涙
条件としては「Strutsを使わずに」ってことなんです;;


StrutsもMVCも理解できてない気がします。
ひろ
会議室デビュー日: 2005/03/08
投稿数: 13
お住まい・勤務地: 京都
投稿日時: 2005-04-26 22:36
解決しました!
というより・・・検索の仕方が悪かったみたいです。
全て日本語サイトを探していました。
今日帰ってきてから、海外のサイトを見て直ぐ解決しました。
どうもお騒がせしました(´;ω;`)
これからは海外のサイトを見てから来ることにします・・・。

皆さん本当にありがとうございました。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2005-04-27 00:14
解決したなら良いのですが、本とか読んで勉強とかしないの?
もちろんWEB上にいろいろな解説があるのは真実ですが...
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-04-27 01:07
どもです。がると申します。
まぁ、解決できたとの事なのであまりせっついても、とは思うのですが。
# とはいえ、あれだけ皆さんが返事を書いてくださっていたのですから
# 「どのように解決したか」については書いていただきたかったような…

引用:

現在「Strutsを使わずにMVCを実現する」と言う難題に手間取っています。


この手の手合いの発現を見るに常々不思議なのですが。
Strutsってただの「フレームワーク」ですよね?
なんとなく、最近「**がないと作れない」という発言を多々見かける
ように思われて。

MVCの実現程度であれば、どんな言語でも、大抵は可能です(bashで可能かと
いうと…無理ではないのが恐ろしいことです :-P )。
MVCは実装手段というよりは「実装概念」なので。
その概念さえちゃんと把握していれば簡単に実装できるでしょうし、
その概念が把握できていなければ、例えフレームワークを作っても
あっというまに躓くでしょう。

基本は、そろそろコケが生すくらい古くに言われている
「データ+アルゴリズム」
です。
で、データってのは inと out があるために、MVCではそれを切り分けて
いるってだけです。

ここに書かれている多くの方は、ひろさんに「やり方を教える」のでは
なくて「その背景にある思想を学んでほしい」と願っていたのだと
思うのですが。

以上、年寄りの独り言でした :-P
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2005-04-27 02:01
そもそもの課題はWeb検索のやり方だったのでしょうか?
結局与えられた課題は取り組まずにカンニングでごまかしたんですよね。
まさかお給料はもらってませんよね?
ひろ
会議室デビュー日: 2005/03/08
投稿数: 13
お住まい・勤務地: 京都
投稿日時: 2005-04-28 23:30
>るぱんさん
>ibaraさん
>aaさん
>かつのりさん
>ロスさん
>七味唐辛子さん
>がるがるさん
>taroさん
機能は最後までかけなくて申し訳ございませんでした。
どうも混乱していたようで恥ずかしいです。
解決したので全てのソースを載せます。
かなり長くなりますが見て貰えると嬉しいです。

-----------------------------------------------------------------
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>
<!--ParameterList-->
<context-param>
<param-name>index</param-name>
<param-value>indexAction</param-value>
</context-param>
<context-param>
<param-name>indexjsp</param-name>
<param-value>/index.jsp</param-value>
</context-param>
<!--ClassList-->
<servlet>
<servlet-name>cntr</servlet-name>
<servlet-class>Controller</servlet-class>
</servlet>
<servlet>
<servlet-name>index</servlet-name>
<servlet-class>IndexAction</servlet-class>
</servlet>
<!--MappingList-->
<servlet-mapping>
<servlet-name>cntr</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/indexAction</url-pattern>
</servlet-mapping>
<!--WelcomPage-->
<welcome-file-list>
<welcome-file>index.do</welcome-file>
</welcome-file-list>
</web-app>

-----------------------------------------------------------------
Controller.java
-----------------------------------------------------------------
import java.io.IOException;

import javax.servlet.*;
import javax.servlet.http.*;


/*
* 作成日: 2005/04/28
*/

/**
* @author F.Okumura
*/
public class Controller extends HttpServlet{
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
main(request,response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
main(request,response);
}
public void main(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
//転送されてきたURL表示
System.out.println("URI:" + request.getRequestURI());
//contextPathを取り出し、/を付ける
String contextPath = request.getContextPath() + "/";
System.out.println("contextPath:" + contextPath);
//URIのparameter取得
String parameter = request.getRequestURI().replaceAll(contextPath, "")
.replaceAll(".do", "");
System.out.println("parameter:" + parameter);
//ServletContextのアドレスを取り出す。
ServletContext servletContext = getServletContext();
//<context-param>の値を取り出す。
String mapping = servletContext.getInitParameter(parameter);
System.out.println("mapping:" + mapping);
if(mapping != null) {
//転送先の設定
RequestDispatcher requestDispatcher =
request.getRequestDispatcher(mapping) ;
requestDispatcher.forward(request,response);
}else{
//エラーページ遷移
RequestDispatcher requestDispatcher =
request.getRequestDispatcher("/jsp/error.jsp");
requestDispatcher.forward(request,response);
}
}
}

-----------------------------------------------------------------
IndexAction.java
-----------------------------------------------------------------
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.okumura.util.Calendar;

/*
* 作成日: 2005/04/28
*/

/**
* @author F.Okumura
*/
public class IndexAction extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
main(request,response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
main(request,response);
}
public void main(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
//自作Calendarクラス使用
Calendar calendar = new Calendar("yyyy/MM/dd");
//SessionオブジェクトにCalendarインスタンスのアドレスを保存する。
HttpSession session = request.getSession();
session.setAttribute("calendar", calendar);
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
}
-----------------------------------------------------------------
Calendar.java
-----------------------------------------------------------------
/*
* 作成日: 2005/04/28
*/
package com.okumura.util;

import java.util.GregorianCalendar;

import java.text.SimpleDateFormat;

/**
* @author F.Okumura
*/

public class Calendar {
//Attribute
private GregorianCalendar gregorianCalendar = new GregorianCalendar();

private SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss");

/**
*
*/
public Calendar() {
gregorianCalendar = new GregorianCalendar();
simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
}

/**
*
*/
public Calendar(String format) {
gregorianCalendar = new GregorianCalendar();
simpleDateFormat = new SimpleDateFormat(format);
}

/**
*
* @uml.property name="gregorianCalendar"
*
*/
public GregorianCalendar getGregorianCalendar() {
return gregorianCalendar;
}

/**
*
* @uml.property name="simpleDateFormat"
*
*/
public SimpleDateFormat getSimpleDateFormat() {
return simpleDateFormat;
}

/**
*
* @uml.property name="gregorianCalendar"
*
*/
public void setGregorianCalendar(GregorianCalendar gregorianCalendar) {
this.gregorianCalendar = gregorianCalendar;
}

/**
*
* @uml.property name="simpleDateFormat"
*
*/
public void setSimpleDateFormat(SimpleDateFormat simpleDateFormat) {
this.simpleDateFormat = simpleDateFormat;
}

/**
*
* @uml.property name="time"
*
*/
public String getTime() {
return simpleDateFormat.format(gregorianCalendar.getTime());
}
}

-----------------------------------------------------------------
index.jsp
-----------------------------------------------------------------
<%@ page contentType="text/html;charset=MS932" %>
<jsp:useBean id="calendar" class="com.okumura.util.Calendar" scope="request" />
<HTML>
<HEAD>
<TITLE>index</TITLE>
</HEAD>
<BODY>
<%= calendar.getTime() %>
</BODY>
</HTML>

上記の用に組むことで解決しました。
言葉足らずの点では凄く申し訳なく思います。
書き込みの時・・・
「http://localhost:8080/Test/servlet/index.do」
と書いていましたが、
「http://localhost:8080/Test/index.do」
でした。
今回は本当に申し訳ございませんでした。

[ メッセージ編集済み 編集者: ひろ 編集日時 2005-04-28 23:31 ]
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-04-29 01:30
どもです。がるです。
正直、プログラム全文をじっくり読んだわけでは全然ないのですが。
んっと…MVC ?
ってのが正直な感想でした。

そうですねぇ。MVCにはいくつかの利点があるのですが。
その利点が、このプログラムで「享受出来ているかどうか」を判断
してみると、わかりやすいかもです。

・in/outと業務ロジックの分離による「アプリケーション等への移植性」
今回のプログラムのうち、データの入出力手段が「まったく違うもの」に
なったときに、容易に移植が可能ですか?
例)
入力は**クラスからの特殊なメソッドで行い、出力はやはり
**クラスの特殊なメソッドに対して行う

・out部分の分離による「デザイン変更の容易性」
出力を「yyyy/mm/dd」から、「yyyy年 mm月 dd日」に変更。
さらに、年と月と日を、それぞれ別の色で出力し(FONTエレメント)、
なおかつ年のみ、STRONGエレメントで強調表示を行う

ひろさんが作成されたプログラムに上記の要求があったときに
・片手間で10数分〜1時間未満
で容易に出来るのであれば、それなりによいモノだと思います。
逆に、上記の要求で困ってしまうようであれば、MVCとしては落第点
だと思います。

いかがでしょうか?

スキルアップ/キャリアアップ(JOB@IT)