Date: 2004-04-29T09:09:59
Editor: 131.191.40.91 <>
Wiki: Apache Struts Wiki
Page: StrutsCatalogEschewUrlForProtocol
URL: http://wiki.apache.org/struts/StrutsCatalogEschewUrlForProtocol
no comment
New Page:
StrutsCatalog: '''Sick of URLs and all the "relative" and "absolute" conundrums? Do
you have having to cooperate with client browsers? You've found Valhalla! Substitute
protocols in struts actions for all that nonsense.'''
Here's the action:
{{{
public final class ResourceAction
extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException,
ServletException {
new ResourceFacade().handle(request, response);
return null;
}
}
}}}
Here's the facade:
{{{
public class ResourceFacade {
public ResourceFacade() {
super();
}
public void handle(HttpServletRequest request,
HttpServletResponse response) {
new WriteResponse().write(new InitResponse().init(request, response), response);
return;
}
}
}}}
Here's the initialization of the response:
{{{public class InitResponse {
private static Log log = LogFactory.getLog(InitResponse.class);
public InitResponse() {
}
public String init(HttpServletRequest request,
HttpServletResponse response) {
String fileType = (request.getParameter(ImageConstant.TYPE)).intern();
String fileName = request.getParameter(ImageConstant.NAME);
String contentType = null;
String file = null;
if (fileType == ImageConstant.JPEG_FILE) {
contentType = ImageConstant.JPEG_CONTENT;
file = ImageConstant.JPEG_LOCATION;
}
else if (fileType == ImageConstant.FLASH_FILE) {
contentType = ImageConstant.FLASH_CONTENT;
file = ImageConstant.FLASH_LOCATION;
}
else if (fileType == ImageConstant.GIF_FILE) {
contentType = ImageConstant.GIF_CONTENT;
file = ImageConstant.GIF_LOCATION;
}
else if (fileType == ImageConstant.TEXT_FILE || fileType ==
ImageConstant.CSS_FILE) {
contentType = ImageConstant.TEXT_CONTENT;
file = ImageConstant.TEXT_LOCATION;
}
else if (fileType == ImageConstant.HTML_FILE) {
contentType = ImageConstant.HTML_CONTENT;
file = ImageConstant.HTML_LOCATION;
}
else if (fileType == ImageConstant.APPLET_FILE) {
contentType = ImageConstant.APPLET_CONTENT;
file = ImageConstant.APPLET_LOCATION;
}
response.setContentType(contentType);
return Classpath.WEB_INF + file + fileName;
}
}
}}}
Here are the image constants:
{{{
public class InitResponse {
private static Log log = LogFactory.getLog(InitResponse.class);
public InitResponse() {
}
public String init(HttpServletRequest request,
HttpServletResponse response) {
String fileType = (request.getParameter(ImageConstant.TYPE)).intern();
String fileName = request.getParameter(ImageConstant.NAME);
String contentType = null;
String file = null;
if (fileType == ImageConstant.JPEG_FILE) {
contentType = ImageConstant.JPEG_CONTENT;
file = ImageConstant.JPEG_LOCATION;
}
else if (fileType == ImageConstant.FLASH_FILE) {
contentType = ImageConstant.FLASH_CONTENT;
file = ImageConstant.FLASH_LOCATION;
}
else if (fileType == ImageConstant.GIF_FILE) {
contentType = ImageConstant.GIF_CONTENT;
file = ImageConstant.GIF_LOCATION;
}
else if (fileType == ImageConstant.TEXT_FILE || fileType ==
ImageConstant.CSS_FILE) {
contentType = ImageConstant.TEXT_CONTENT;
file = ImageConstant.TEXT_LOCATION;
}
else if (fileType == ImageConstant.HTML_FILE) {
contentType = ImageConstant.HTML_CONTENT;
file = ImageConstant.HTML_LOCATION;
}
else if (fileType == ImageConstant.APPLET_FILE) {
contentType = ImageConstant.APPLET_CONTENT;
file = ImageConstant.APPLET_LOCATION;
}
response.setContentType(contentType);
return Classpath.WEB_INF + file + fileName;
}
}
}}}
Here's the Classpath code:
{{{
public final class Classpath {
public static final String HERE = Classpath.class.getClassLoader().getResource("com"
+ File.separator +
"crackwillow" + File.separator +
"classpath" + File.separator +
"Classpath.class").getFile();
public static final String WEB_INF = HERE.substring(0, HERE.lastIndexOf("classes"));
}
}}}
You know the code on the Struts !ActionServlet, I assume. Here's the action mapping:
{{{
<action
path='/resource'
type='com.crackwillow.struts.action.ResourceAction'
scope='request'/>
}}}
And, here is a use.
{{{
<%@ page language='java' %>
<%@ page contentType='text/html; charset=UTF-8' %>
<%@ taglib uri='struts-bean' prefix='bean' %>
<%@ taglib uri='struts-html' prefix='html' %>
<%@ taglib uri='struts-tiles' prefix='tiles' %>
<html:html>
<head>
<title>HTML Buttons Example</title>
<link
rel="STYLESHEET"
type="text/css"
href="resource.do?file_type=css&file_name=index.css">
</head>
<body
background="resource.do?file_type=gif&file_name=green.gif"
text="#ffffff">
<h1
align="center">
HTML Buttons Example
</h1>
<table
border="0"
align="center"
width="80%"
cellpadding="3"
cellspacing="0">
<tr>
<td>
<h1>
Registration Form
</h1>
</td>
</tr>
</table>
<html:form
name="ButtonForm"
type="com.crackwillow.struts.form.ButtonForm" method="get"
action='/button.do'>
<table
border="0"
align="center"
width="80%"
cellpadding="3"
cellspacing="0">
<tr>
<td
width="1%"
nowrap>
First name:
</td>
<td>
<input
type="text"
name="firstName"
value="">
</td>
</tr>
<tr>
<td
width="1%"
nowrap>
Last name:
</td>
<td>
<input
type="text"
name="lastName"
value="">
</td>
</tr>
<tr>
<td
width="1%"
nowrap>
Email:
</td>
<td>
<input
type="text"
name="ssn"
value="">
</td>
</tr>
<tr>
<td
width="1%"
nowrap>
</td>
<td>
<br><br>
<html:image
property="button.submit"
src="resource.do?file_type=gif&file_name=cw_logo.gif"/>
<html:image
property="button.clear"
src="resource.do?file_type=gif&file_name=cw_logo.gif"/>
<html:image
property="button.cancel"
src="resource.do?file_type=gif&file_name=cw_logo.gif"/>
<html:image
property="button.reset"
src="resource.do?file_type=gif&file_name=cw_logo.gif"/>
</td>
</tr>
</table>
</html:form>
</body>
</html:html>
}}}
What is this button nonsense? See StrutsCatalogMultipleImageButtonsWithNoJavaScript
Enjoy!
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]