異常処理もなにも考えていないごくごく素朴な方法ですが。。。ソースコードをBase64を用いて変換してDBに格納したり取り出したりするJSPです。自己メモとして。なお、クラサバともmacで利用することを想定しています。
動作するための準備:
(1)ここを押してapache commons codecをダウンロードして参照できるところ(WEB-INF/lib等)使う。
(2)ここを押してSyntaxHilighterをダウンロードしてドキュメントルートに配置する。
- b64.jsp
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="shCore.js"></script> <script type="text/javascript" src="shBrushJava.js"></script> <link type="text/css" rel="stylesheet" href="shCoreDefault.css"/> <script type="text/javascript">SyntaxHighlighter.all();</script> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body> <% request.setCharacterEncoding("utf-8"); String btn = request.getParameter("btn"); String code = request.getParameter("code"); if ("SEND".equals(btn)) { Class.forName("org.apache.derby.jdbc.ClientDriver"); Properties prop = new Properties(); prop.put("user", "user"); prop.put("password", "pass"); Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/sample;create=true",prop); con.setAutoCommit(true); Statement stmt = con.createStatement(); byte[] encodedCode = Base64.encodeBase64(code.getBytes()); String encodedStr = new String(encodedCode); String sql = "INSERT INTO CODES (CODE) VALUES ('" + encodedStr + "')"; int cnt = stmt.executeUpdate(sql); stmt.close(); con.close(); } Class.forName("org.apache.derby.jdbc.ClientDriver"); Properties prop = new Properties(); prop.put("user", "user"); prop.put("password", "pass"); Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/sample;create=true",prop); con.setAutoCommit(true); Statement stmt = con.createStatement(); String sql = "SELECT * FROM CODES"; ResultSet rest = stmt.executeQuery(sql); while(rest.next()) { String storedCode = rest.getString("CODE"); byte[] decoded = Base64.decodeBase64(storedCode.getBytes("utf-8")); String decodedStr = new String(decoded); out.print("<pre class=\"brush: java;\">" + decodedStr + "</pre>"); } stmt.close(); con.close(); %> </body>
- index.html
<body> <form action="b64.jsp" method="post"> <textarea name="code"> </textarea> <br> <input type="submit" name="btn" value="SEND"> </form> </body>
ついでに、テーブルに関係するSQLは以下です。
CREATE TABLE CODES ( ID INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, CODE VARCHAR(1000) ) INSERT INTO CODES (CODE) VALUES ('class Hello {...') SELECT * FROM CODES; DELETE FROM CODES;