为了让Action类能够访问WEB资源,需要进行以下几个步骤:
1. 在struts.xml中进行配置
在struts.xml中需要配置一个<constant>
元素,设置resourceBase属性为需要访问的WEB资源的路径。
示例代码:
<constant name="struts.convention.result.path" value="/WEB-INF/views/" />
<constant name="struts.convention.default.parent.package" value="convention-default" />
<constant name="struts.convention.package.locators" value="struts.convention.package.locators.PackageLocators" />
<constant name="struts.resources.dir" value="/resources" />
<constant name="struts.resources.static.path" value="/resources" />
<constant name="struts.resources.allow.all" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.custom.i18n.resources" value="i18n" />
<constant name="struts.configuration.xml.reload" value="false" />
<constant name="struts.mapper.action.prefix.enabled" value="true"/>
<constant name="struts.action.extension" value="do,," />
<constant name="struts.action.excludePackagePrefixes" value="org.apache.struts.*,com.opensymphony.*,com.sun.*,javax.servlet.*,javax.swing.*" />
<constant name="struts.excludedPackageNamePatterns" value="com\\.sun\\..*,javax\\.swing\\..*" />
<constant name="struts.excludedSubpackageNames" value="example" />
<constant name="struts.convention.action.suffix" value="Action" />
<constant name="struts.convention.action.mapAllMatches" value="false" />
<constant name="struts.convention.action.packages" value="com.example.action" />
<constant name="struts.convention.default.parent.package" value="struts-default" />
<!-- 设置资源的路径 -->
<constant name="struts.convention.resource.path" value="/public-resources/" />
2. 编写Action类
编写一个Action类,并在其中使用资源路径访问WEB资源。
示例代码:
import com.opensymphony.xwork2.ActionSupport;
public class ResourceAction extends ActionSupport {
private static final long serialVersionUID = -1185303825847418018L;
public String execute() throws Exception {
// 访问resources文件夹下的image.png图片
String imagePath = "/resources/image.png";
InputStream in = ServletActionContext.getServletContext().getResourceAsStream(imagePath);
return SUCCESS;
}
}
在execute方法中,通过访问ServletContext中的getResourceAsStream方法,获取需要访问的WEB资源的输入流。
3. 使用访问到的WEB资源
在execute方法中访问到的WEB资源可以使用Java的IO流进行读取,可以存储到本地,也可以动态返回给客户端。
下面是一个示例代码,将访问到的图片输出到浏览器上:
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
public class ResourceAction extends ActionSupport {
private static final long serialVersionUID = -1185303825847418018L;
public String execute() throws Exception {
// 访问resources文件夹下的image.png图片
String imagePath = "/resources/image.png";
InputStream in = ServletActionContext.getServletContext().getResourceAsStream(imagePath);
// 获取response
HttpServletResponse response = ServletActionContext.getResponse();
ServletOutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024 * 4];
int length;
while ((length = in.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
in.close();
out.flush();
return SUCCESS;
}
}
在该示例代码中,获取到了HttpServletResponse,通过ServletOutputStream将访问到的WEB资源输出到浏览器上。
以上是Action类如何访问WEB资源的完整攻略,以上的示例代码中都是为了访问/resources文件夹下的资源。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2学习教程之Action类如何访问WEB资源 - Python技术站