jsessionidをリクエストパラメータに追加するタグファイルとカスタムタグの実装
携帯ブラウザって、クッキーの実装がないみたいなのでセッションを保持するのに、リクエストに"jsessionid=xxxxxxxxx"みたいなセッションIDを保持する必要がある。
そこで、リクエストにjsessionidを追加するタグファイルとカスタムタグを作りました。
タグファイルで実装
- タグファイル(WEB-INF/tags/link.tag)
<%@ tag pageEncoding="UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- 属性と変数の定義 --%> <%@ attribute name="href" rtexprvalue="true" description="Aタグのhref" %> <%-- メイン --%> <a href="${href};jsessionid=<%= request.getRequestedSessionId() %>" ><jsp:doBody/></a>
<%@taglib tagdir="/WEB-INF/tags" prefix="tag" %> tags:<tag:link href="aaaa.do">ああああ</tag:link>
カスタムタグで実装
<?xml version="1.0" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>link</short-name> <tag> <name>link</name> <tag-class>sample.tag.SLinkTag</tag-class> <attribute> <name>href</name> </attribute> <attribute> <name>value</name> </attribute> <body-content>empty</body-content> </tag> </taglib>
- javaファイル
package sample.tag; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.taglib.TagUtils; public class SLinkTag extends TagSupport { /** * */ private static final long serialVersionUID = -870003462039166376L; private String href; private String value; public SLinkTag() { super(); } public int doStartTag() throws JspException { try { // String requestSessionId = (String)TagUtils.getInstance().lookup( // pageContext, "RequestedSessionId", "request"); HttpServletRequest request = (HttpServletRequest) pageContext .getRequest(); StringBuilder sb = new StringBuilder(); sb.append(";jsessionid="); sb.append(request.getRequestedSessionId()); pageContext.getOut().write( "<a href=\"" + href + sb.toString() + "\">"); } catch (IOException e) { throw new JspException("SLinkTag#doStartTag", e); } return SKIP_BODY; } public int doEndTag() throws JspException { try { pageContext.getOut().write(value + "</a>"); } catch (IOException e) { throw new JspException("SLinkTag#doEndTag", e); } return EVAL_PAGE; } /* * 属性linkのsetter */ public void setHref(String href) { this.href = href; } /* * 属性valueのsetter */ public void setValue(String value) { this.value = value; } }
<%@taglib prefix="ss" uri="../WEB-INF/tld/link.tld" %> tld:<ss:link href="aaaa.do" value="ああああ"/>