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

jspのコンパイル アンサポート52.0 2015/07/18


google app engineです。


上記の記事とまったく同じで、はじめなぜJSPだけなのかでかなり悩みました。

現時点でのgoogle app engineでつかえるjavaのバージョンは1.7です。
やっかいなのは、jspのコンパイルはどうもeclipseを起動した際のjavaのバージョンによってしまうことのようです。
※指定できる方法があるのではと思ってるのですが....


参考

しかたがないので、eclipse起動で使用するjavaのバージョンをjdk1.7を指すように変更しました。
僕が使っているのは、eclipse Version: Mars Release (4.5.0)

インストールした1.7は、jdk1.7.0_80

ちなみにosx上でのjavaの場所は、
/Library/Java/JavaVirtualMachines

eclipse.iniを書き直すって面倒。

この問題はけっこう面倒ですね。

ちょっとふるいJSP,strutsな環境でのお話。 2014/03/18

ちょっとふるいJSP,strutsな環境でのお話。

ユーザの権限で<logic:equalとかで囲んだ部分をみせたりみせなかったりしている部分で、ひとつのプロパティを参照するだけで対応できなくなった。

まあ、JSPなのでごりごりやればできるのだけど、暗黙の了解、規約?の制約で、なんとなくできるでだけタグを使うというのがしばりとなっていた。

それで、まず<bean:defineでbeanから値をとりだす。さらに<bean:defineを使って、valueにEL式で判定させて、値をセット。その値を使って、を操作という流れでうまくいった。

ここでみそなのは、EL式をvalue内で使うということ、ここで、複雑な判定を行うことができた。

jspとタグで検索すると、必ずヒットするサイトがあるけど、もう少し応用とか説明があるとうれしかったなー

EL式、むーいいかもしれないと思った。


jspを返すrestlet 2014/02/03

jspを返すrestlet です。
とはいいつつ、これは正確な言い回しではないかもです。
GAE上で、Restletを使っていろいろ試しているところなのですが、restletで返すページ(この言い回しが正しいか微妙ですが)で、jspを指定して返したいなと。
で、いろいろ調べていて
jspってコンテナ上で、コンパイルされて処理されるものなので、どうもRestlet経由で、おこなうものっていうものでないらしく、僕が想像しているような感じのものがみつかりませんでした。


ただ、方法として、とりあえず、それっぽいものがあったので、忘れないように記事にしておきます。


 いまいち、決めてに欠ける理由に、こういう処理をしたいというニーズがないのかなと不安になりますが、海外で上記のやりとりがあるところから、JSPを処理して返したいという人々もいるのでしょう。

ルーターとして処理をしてくれるなら、なんでもそこを通して処理をしたいというの人の性(さが)というもので、いちいとweb.xmlとルーターで処理を分けるのもかったるいというか。。。

 と、Restletをさわりはじめて数日なので、的外れな意見かもしれませんが。

とにもかくにも忘れないうちにコードを残しておきます。

使い方は、そのものずばり

router.attach("/mng/kind/{name}/dummy", new JspRestlet(getContext(), "/ok.jsp"));

 それで、JspRestletの本体は、こんな感じ。


package jp.deiji.application; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.StringWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import org.restlet.Context; import org.restlet.Request; import org.restlet.Response; import org.restlet.Restlet; import org.restlet.data.MediaType; import org.restlet.engine.adapter.HttpRequest; import org.restlet.ext.servlet.internal.ServletCall; import org.restlet.representation.InputRepresentation; import org.restlet.representation.Representation; public class JspRestlet extends Restlet { String path; public JspRestlet(Context context, String path) { super(context); this.path = path; } @Override public void handle(Request request, Response response) { ServletCall httpCall = (ServletCall) ((HttpRequest) request) .getHttpCall(); RequestDispatcher dispatcher = httpCall.getRequest() .getRequestDispatcher(this.path); HttpServletRequest proxyReq = new HttpServletRequestWrapper( httpCall.getRequest()); BufferedServletResponseWrapper proxyResp = new BufferedServletResponseWrapper( httpCall.getResponse()); try { dispatcher.include(proxyReq, proxyResp); } catch (ServletException | IOException e) { e.printStackTrace(); } Representation rep = new InputRepresentation(proxyResp.toInputStream(), MediaType.TEXT_PLAIN); response.setEntity(rep); } /** * http://permalink.gmane.org/gmane.comp.java.restlet/8441 * * */ public class BufferedServletResponseWrapper extends HttpServletResponseWrapper { private StringWriter writer; private PrintWriter printWriter; private ByteArrayOutputStream outBuffer; private ServletOutputStream out; public BufferedServletResponseWrapper( HttpServletResponse httpServletResponse) { super(httpServletResponse); } public ServletOutputStream getOutputStream() throws IOException { if (printWriter != null) { throw new UnsupportedOperationException( "Outputstream cannot beobtained - getWriter already called"); } if (out == null) { outBuffer = new ByteArrayOutputStream(); out = new ServletOutputStream() { public void write(int b) throws IOException { outBuffer.write(b); } }; } return out; } public PrintWriter getWriter() throws IOException { if (out != null) { throw new UnsupportedOperationException( "Writer cannot beobtained - getOutputStream already called"); } if (printWriter == null) { writer = new StringWriter(); printWriter = new PrintWriter(writer); } return printWriter; } /** * This method is not supported, as it makes no sense to send a redirect * on a ServletResponse that is not connected. * * <at> param s <at> throws UnsupportedOperationException always */ public void sendRedirect(String s) throws IOException { throw new UnsupportedOperationException( "sendRedirect no supportedin restlet proxy"); } /** * Returns the content of the buffer as a string * * <at> return the content of the buffer */ public InputStream toInputStream() { if (printWriter != null) { printWriter.flush(); return new ByteArrayInputStream(writer.getBuffer().toString() .getBytes()); } else if (out != null) { return new ByteArrayInputStream(outBuffer.toByteArray()); } else { return new ByteArrayInputStream(new byte[] {}); } } } }






jsp-configはGAE/Jで使えるよ 2013/11/30

jspです。google app engineで動かしています。
ひさしぶりにjspをさわっています。生のサーブレットとかjspとかわさわっていると、いろいろあらためて、勉強になったりならなかったり。

で、jspで文字化けして、あああ、ちょっとはずかしかったりしてます。

jspファイルの先頭にごちゃごちゃつくのがいやで なんとかならないかなーと思ってたところ、jsp-configなるものがあることを発見。以前のGAEでは使えなかったのでしょうか。
今は、使えました。

参考


web.xmlに定義していけば、記述量がへってハッピーです。
 
フレームワークとかライブラリを極力導入をさけたいので、素のサーブレット、素のjspでいきたいので、いろいろ調べないといけないことがあるなーというのがいまの状態です。

すぷりんぐ - select tagで選択された状態にしたい場合 2011/05/05
2011/05/07


select tagで選択された状態にしたい場合、下記のコードで実現できたようにみえたけど。。。

<form:select path="code">
<form:option value="">[select one value]</form:option>
<form:options items="${codeList}" itemLabel="labelAttribute"/>
</form:select>


これではちゃんと解決されていない...

単純にpathにオブジェクト指定すればいいのではないか...

JPEGファイルを読みこんで返すJSP 2009/01/15

えーと、Javaです。
JSPを使って任意のJPEGファイル読み込み適当に返します。

web.xmlです。
mappingで拡張子がjpg,jpegであるものに適用します。

<servlet>
<servlet-name>read_image</servlet-name>
<jsp-file>/read_image.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>read_image</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>read_image</servlet-name>
<url-pattern>*.jpeg</url-pattern>
</servlet-mapping>



JSPです。
結構イージーにつくってます。
<%@ page language="java"
contentType="image/jpeg"%><%
String root = "/";
String s = request.getRequestURI();
System.out.println("jpeg request:[" + request.getRequestURI() + "] imagepath:[" + s + "]");
java.io.BufferedInputStream input = new java.io.BufferedInputStream(
new java.io.FileInputStream(root + s));
java.io.BufferedOutputStream output = new java.io.BufferedOutputStream(response
.getOutputStream());
byte[] buf = new byte[8192];
int len = -1;
while ((len = input.read(buf)) != -1) {
output.write(buf, 0, len);
output.flush();
}

input.close();
output.close();
%>

jsp 接続しているリモートアドレスの取得。 2007/10/23

接続しているリモートアドレスの取得。
tomcatとかについているサンプル(snoop)つかえば簡単だけど。

このリモートアドレスは、プロクシサーバ通して接続されれば、もちろん書き換えられたアドレスに変換されます。

<html>
<body>
<h1> your remote address </h1>
<font size="4">
<br>
Remote address: <%= request.getRemoteAddr() %>
<br>
Remote host: <%= request.getRemoteHost() %>
</font>
</body>
</html>


参考:
Servlet samples