struts2中以json的方式输出一张页面到前台
package net.esj.struts.resultsupport;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Properties;
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.esj.basic.config.Config;
import net.esj.basic.plugins.freemarker.SpringConfigToFreemarkerManager;
import net.esj.basic.utils.hibe.HiJSONUtil;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.config.DefaultSettings;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.apache.struts2.views.util.ResourceUtil;
import org.json.JSONException;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.LocaleProvider;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ValueStack;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
/**
* 将对应的页面文件以json的方式ajax输出到前台
* @author Administrator
*
*/
public class JsonViewResult extends FreemarkerUsageResult {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final String JSON_VIEW_PROPERTIES = "json.view.properties";
protected Configuration configuration;
protected Configuration userConfiguration;
protected ObjectWrapper wrapper;
private String pContentType = "text/text";
protected SpringConfigToFreemarkerManager springConfigToFreemarkerManager;
@Override
public void doExecute(String location, ActionInvocation invocation) throws IOException, TemplateException{
this.configuration = getConfiguration();
this.wrapper = getObjectWrapper();
if (!location.startsWith("/")) {
ActionContext ctx = invocation.getInvocationContext();
HttpServletRequest req = (HttpServletRequest) ctx
.get(ServletActionContext.HTTP_REQUEST);
String base = ResourceUtil.getResourceBase(req);
location = base + "/" + location;
}
Template template = null;
try{
if(canUserConfiguration(invocation)){
this.userConfiguration = getUserConfiguration();
template = userConfiguration.getTemplate(location,
deduceLocale(invocation));
}
}catch(Exception e){
//NOUSE
}finally{
if(template==null){
template = configuration.getTemplate(location,
deduceLocale(invocation));
}
}
TemplateModel model = createModel(invocation);
Writer out = new StringWriter();
if (preTemplateProcess(template, model)) {
try {
template.process(model, out);
String result = HiJSONUtil.toJSONString(out.toString());//转成JSON
ServletActionContext.getResponse().getWriter().print(result);
} catch (JSONException e) {
e.printStackTrace();
} finally {
postTemplateProcess(template, model);
}
}
}
protected void postTemplateProcess(Template template, TemplateModel data)
throws IOException {
}
protected boolean preTemplateProcess(Template template, TemplateModel model)
throws IOException {
Object attrContentType = template.getCustomAttribute("content_type");
if (attrContentType != null) {
ServletActionContext.getResponse().setContentType(
attrContentType.toString());
} else {
String contentType = getContentType();
if (contentType == null) {
contentType = "text/html";
}
String encoding = template.getEncoding();
if (encoding != null) {
contentType = contentType + "; charset=" + encoding;
}
ServletActionContext.getResponse().setContentType(contentType);
}
return true;
}
protected TemplateModel createModel(ActionInvocation invocation)
throws TemplateModelException {
ServletContext servletContext = ServletActionContext
.getServletContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ValueStack stack = ServletActionContext.getContext().getValueStack();
Object action = null;
if (invocation != null)
action = invocation.getAction(); // Added for NullPointException
return springConfigToFreemarkerManager.buildTemplateModel(stack, action,
servletContext, request, response, wrapper);
}
protected Configuration getConfiguration() throws TemplateException {
return springConfigToFreemarkerManager.getConfiguration(ServletActionContext
.getServletContext());
}
protected Configuration getUserConfiguration() {
return springConfigToFreemarkerManager.getUserConfiguration(ServletActionContext
.getServletContext());
}
protected Locale deduceLocale(ActionInvocation invocation) {
if (invocation.getAction() instanceof LocaleProvider) {
return ((LocaleProvider) invocation.getAction()).getLocale();
} else {
return configuration.getLocale();
}
}
protected ObjectWrapper getObjectWrapper() {
return configuration.getObjectWrapper();
}
public String getContentType() {
return pContentType;
}
public void setContentType(String aContentType) {
pContentType = aContentType;
}
protected Writer getWriter() throws IOException {
return ServletActionContext.getResponse().getWriter();
}
@Resource
public void setSpringConfigToFreemarkerManager(SpringConfigToFreemarkerManager mgr) {
this.springConfigToFreemarkerManager = mgr;
}
}
增加struts.xml配置
<package name="melon-default" extends="struts-default" >
<result-types>
<result-type name="jsonview" class="net.esj.struts.resultsupport.JsonViewResult"/>
</result-types>
</package>
分享到:
相关推荐
总的来说,"struts2+json"资源涉及到了Struts2框架中的Action设计、拦截器机制、结果类型的配置,以及AJAX和JSON在Web应用中的使用。理解这些知识点对于开发动态、交互性强的Java Web应用至关重要。
总结,Struts2中返回JSON数据有两种主要方式:一是通过`response.getWriter().print()`手动输出JSON字符串;二是利用Struts2的内置JSON插件,通过返回特定的属性和结果类型自动处理JSON。每种方法都有其适用场景,...
在探讨“Struts2与JSON整合”的主题时,我们深入分析了如何在Struts2框架中集成JSON技术,实现前后端数据的高效交互。Struts2作为一款流行的Java Web开发框架,提供了丰富的功能来简化Web应用程序的开发过程。而JSON...
struts2-json-plugin,Struts JSON插件
此外,Struts2的JSON漏洞曾引起广泛关注,因此保持框架版本的更新至关重要,以修复可能的安全漏洞。 8. **客户端处理**: 客户端通常使用JavaScript或Ajax来处理JSON响应,例如使用jQuery的`$.ajax`或`fetch` API...
赠送jar包:struts2-json-plugin-2.3.24.jar; 赠送原API文档:struts2-json-plugin-2.3.24-javadoc.jar; 赠送源代码:struts2-json-plugin-2.3.24-sources.jar; 赠送Maven依赖信息文件:struts2-json-plugin-...
在Struts2中,通过整合JSON插件,可以方便地将Action的返回结果转换为JSON格式,供前端JavaScript处理。 `struts2-json-plugin`是Struts2的一个插件,它使得Struts2能够处理JSON请求和响应,无需额外的配置或库。这...
在Struts2中,返回JSON(JavaScript Object Notation)数据类型是一种常见的需求,尤其是在开发AJAX或者前后端分离的应用时。JSON是一种轻量级的数据交换格式,它允许服务器向客户端发送结构化的数据,而无需解析...
在Struts2中,我们可以使用JQuery的Ajax方法(如`$.ajax()`或`$.post()`)发送异步请求,提交表单数据到服务器,同时获取JSON响应。 整合步骤如下: 1. **配置Struts2**: 首先,确保你的项目已经引入了Struts2的...
`struts2-json-plugin-2.1.8.1.jar` 则是Struts 2框架的一个插件,主要用于增强Struts 2对JSON的支持。Struts 2是一款非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。这个插件允许...
总结来说,通过这种方式,我们可以利用AJAX向Struts2 Action传递JSON数组,实现异步数据交互。这在动态更新页面内容、处理表单提交等场景下非常有用。同时,使用JSON作为数据交换格式,使得前后端的数据交换变得更加...
1. 配置Struts2:在struts.xml配置文件中,为Action添加一个JSON结果类型,这样Struts2将会返回JSON响应。 2. 接收JSON数据:在Action类的setter方法中,使用@Param注解接收JSON参数。 3. 处理业务逻辑:在Action中...
在Struts2中集成JSON数据格式,能够使得前后端交互更加高效,因为JSON是一种轻量级、易于解析的数据交换格式。本压缩包提供了在Struts2中使用JSON所需的全部jar包,特别适用于支持struts2.18及更高版本的应用,确保...
Struts2提供了一种内置的方式来处理JSON响应,无需额外的库。但是,为了更全面的功能和更好的性能,开发者通常会引入第三方JSON库,如`org.json`或`json-lib`。这个"与struts2配套的JSON架包"可能包含这些库的JAR...
导入这些包后,开发者可以按照Struts2的配置方式设置Action,通过`@ResultType("json")`注解或在配置文件中指定`result`类型为`json`,Struts2就会自动将Action的返回值转化为JSON格式并发送到客户端。 在实际开发...
如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。... Struts2返回JSON有两种方式:1.使用Servlet的输出流写入JSON字符串;2.使用Struts2对JSON的扩展。
Struts2、JSON和Android是三个在Web应用开发中至关重要的技术。本示例将详细介绍如何结合这三者实现一个简单的交互。 首先,Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,它简化了创建动态、...
Struts2 JSON是一个在Java开发中广泛使用的框架,它允许开发者在Struts2应用程序中方便地处理JSON(JavaScript Object Notation)数据。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...
1. 添加JSON插件到项目的类路径:确保`struts2-json-plugin-x.x.x.jar`在类路径中,并在`struts.xml`配置文件中启用JSON插件。 2. 配置Action:在Action类中,添加`@Result`注解或者在XML配置文件中定义结果类型为`...
在使用JSON功能前,确保已添加Struts2 JSON插件到项目依赖中。如果是Maven项目,可以在pom.xml中添加如下依赖: ```xml <groupId>org.apache.struts <artifactId>struts2-json-plugin <version>your_struts2_...