プログラマメモ2 - programmer no memo2

groovletでweb.xmlからデータをとるひとつの方法 2007/11/06

groovyでgroovletです。

web.xmlで、

<context-param>
<param-name>no</param-name>
<param-value>o_o!!!!</param-value>
</context-param>


で書くと、groovletから、

context.getInitParameter('no')

で値がとれました。

どうも下記の場所じゃないっぽいです。
<servlet>
<servlet-name>Groovy</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
<init-param>
<param-name>no</param-name>
<param-value>Hello World</param-value>
</init-param>
</servlet>


参考
web.xml 要素リファレンス

groovlet コードサンプル 2007/10/07

groovlet コードサンプルです。

request.getParameterを受けるときにnull値にならないようにparam関数を使用しています。

CGI Programming
がいろいろ参考になります。


import groovy.xml.MarkupBuilder

response.setContentType('text/html;charset=utf-8');
def c = param('c')
def t = param('t')
def url = param('u')

writer = new StringWriter()
builder = new MarkupBuilder(writer)
builder.p {
h1('更新')
form(action:'publish_post.groovy'){
p('内容を入力')
span('タイトル')
input(type:'text', name:'c', size:70, value:c)
br()
span('内容')
input(type:'text', name:'t', size:70, value:t)
br()
span('url')
input(type:'text', name:'u', size:70, value:url)
br()
input(type:'submit')
input(type:'button', value:'閉じる', onClick:"window.close()")
}
}

println """
<html><head>
<title></title>
</head>
<body>
<p>
${writer.toString()}
</p>
</body>
</html>
"""
def label(text) { b.span(text) }

def param(name) {
param(name, '')
}
def param(name, defValue) {
def val = request.getParameter(name)
if (val) return val else return defValue
}

gspとgroovletの連携方法その1 2007/08/29

groovletとgspがとてもいい感じです。
groovletとgspの連携方法です。

シナリオ

groovletを呼び出して、処理を行いその結果を、gspを利用して表示してください。



web.xmlの設定は以下の感じ
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<display-name>groooovy</display-name>

<servlet>
<servlet-name>Groovy</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>

<servlet>
<servlet-name>GroovyTemplate</servlet-name>
<servlet-class>groovy.servlet.TemplateServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Groovy</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>GroovyTemplate</servlet-name>
<url-pattern>*.gsp</url-pattern>
</servlet-mapping>

</web-app>


まず、f.groovyというgroovletをよびだして、内部で何かしら処理を行います。
そして、その何かしらの処理結果をrequestに入れて、gspにフォワードします。

f.groovyです。
request.p_p=request.getParameter('o_o')

dispatcher = request.getRequestDispatcher('aaa.gsp')
dispatcher.forward(request, response)


何をしているかといいますと、HTTPのgetで、o_oというパラメータを受け取って、それをrequestにp_pという名前でつめています。

このrequest.xxxと直でプロパティを指定、宣言できるのは、やはりすごいなと思います。
あのまどろっこしいgetter,setterから解放されるだけでも、groovyを使いたくなってしまいます(笑)。
※もちろんgetter,setterのよさはありますが、必ずしも用意しなければいけないものではないはずです。getter,setterの起源って何でしたっけ?カプセル化のためだけ?

次にディスパッチャーを取得して、最後にforwardの実行ですね。
このディスパッチャーの処理を一行ですませればいいなと思います。

最後に、フォワードされた先のGSPです。
<html><head>
<title></title>
</head>
<body>
<% println "${request.p_p}" %>
</body>
</html>


あとgroovyを使うなら、もっと軽やかに変数名をつけたいところですかねー。
javaを使う場合は、IDEなしではコーディングしたくない(できない(笑))ですが、groovyだったらちょこっとテキストエディターを開いてパパパパっと書いてしまいたいですねー。

groovletでstatic変数使用してみた。 2007/08/27

groovletでの実験です。

下記のようなコードを用意して動かしてみました。

response.setContentType('text/html;charset=utf-8');

int c = 0

print c++


期待している動作は、表示するたびにカウンタがアップすることです。
groovletのファイルを保存しなおすと、カウンタがクリアされることを望んでいます。

が、結果はそうなりません。

それで、次に、
response.setContentType('text/html;charset=utf-8');

class A{
static int c = 0
}
print A.c++

を試してみましたら、カウンタがアップしていきました!!