struts2 的项目的建立我就不多说了,网上很多。这里就说下 struts.xml 里面关于 result 的配置含义,因为 struts2 会通过这个配置来判断你想要做什么样的操作,是重定向、返回数据还是其他什么的,默认配置的结果类型是dispatcher。具体的 result-type 可以 在struts2-core-2.0.11.1.jar 包或 struts2 源代码中的 struts-default.xml 文件中找到,在这个文件中找到标签,所有的result-type都在里面定义了。
result-type
|
class
|
说明
|
dispatcher
|
org.apache.struts2.dispatcher.
ServletDispatcherResult
|
默认结果类型,用来转向页面,通常处理JSP
|
chain
|
com.opensymphony.xwork2.
ActionChainResult
|
将action和另外一个action链接起来
|
freemarker
|
org.apache.struts2.views.freemarker.
FreemarkerResult
|
处理FreeMarker模板
|
httpheader
|
org.apache.struts2.dispatcher.
HttpHeaderResult
|
用来控制特殊的Http行为
|
redirect
|
org.apache.struts2.dispatcher.
ServletRedirectResult
|
重定向到一个URL
|
redirectAction
|
org.apache.struts2.dispatcher.
ServletActionRedirectResult
|
重定向到一个Action
|
stream
|
org.apache.struts2.dispatcher.
StreamResult
|
向浏览器发送InputSream对象,通常用来处理文件下载或者返回数据给 Ajax 调用
|
velocity
|
org.apache.struts2.dispatcher.
VelocityResult
|
处理Velocity模板
|
xslt
|
org.apache.struts2.views.xslt.
XSLTResult
|
处理XML/XLST模板, 该XML可以通过XSL模板进行转换
|
plaintext
|
org.apache.struts2.dispatcher.
PlainTextResult
|
显示原始文件内容,例如文件源代码
|
ajax 调用 action 没什么说的,跟以前 struts1 差不多,直接调用 .action ,直接将参数 post 传递过去,在 action execute 方法或者动态方法中获取参数就可以了;
action 回传数据给 ajax 的时候用到了上面 result-type 里面的 stream 参数配置,将 InputStream 对象返回给浏览器,在ajax 中通过 responseText 来获取返回的值。
有个问题需要说明一下,尽管工程和 jsp 编码都设置成 utf-8,在使用 stream 进行传递的时候仍然会出现乱码问题,这个时候过滤器也是帮不上忙的,需要在生成 InputStream 对象之前的字符串重新编码,否则中文传递到前台就会出乱码。
下面来看看代码:
ajax.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="ajax.js"></script>
<title>Insert title here</title>
</head>
<body>
<form>
<input type="text" id="nameId"/><br/>
<span id="nameId2"><span></span></span><br/>
<span id="msgId"></span><br/>
<input type="button" onclick="checkUserName()" value="提交"/>
</form>
</body>
</html>
ajax.js
var xhr ;
// 初始化 xhr 对象
// return value : 1 : IE , 2 , Mozila , 0 : create xhr error ;
function createXHR(){
// 1,创建xhr 对象 .
if( window.ActiveXObject ){
xhr = new ActiveXObject( "Microsoft.XMLHTTP" ) ;
return 1 ;
}else if( window.XMLHttpRequest ){
xhr = new XMLHttpRequest();
return 2 ;
}else{
return 0 ;
}
}
// ////////// 验证用户名是否存在 ////////////////////
// 将用户填写的用户名发送给服务器端验证
function checkUserName(){
var ret = createXHR();
if( ret == 0 ){
alert( "create xhr error" ) ;
}else{
// 在xhr中注册用于处理应答的函数(handleCheck)
xhr.onreadystatechange = handleCheck ;
/*
* //使用Get方式向服务器发送请求 .
* var url = makeQueryString( "/ajax/reg.jsp" );
* xhr.open( "get" , url ) ;
* xhr.send( null );
*/
// 通过Post 形式向服务器发送数据 .
var url = "http://localhost:8088/Struts2Demo/ajax_test.action" ;
xhr.open( "post" , url ) ;
xhr.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded" ) ;
xhr.send( makeQueryString( null ) ) ;
}
}
// 在指定的URL上添加参数
function makeQueryString( url ){
var name = document.getElementById( "nameId" ).value ;
var queryString ;
if( url == null ){
return "name=" + name ;
}else{
return url + "?name=" + name ;
}
}
function handleCheck(){
document.getElementById( "nameId2" ).firstChild.innerHTML="用户名不能为空";
// 通信过程结束 .
// readyState : 1: 初始化阶段 2 :连接建立阶段 3 : 通信中阶段 4 : 通信结束
if( xhr.readyState == 4 ){
// status==200,表示服务器运行正常,其他值代表错误
if( xhr.status == 200 ){
processResult();
}else if(document.getElementById( "nameId" ).value==""){
document.getElementById( "nameId2" ).firstChild.nodeValue="用户名不能为空";
document.getElementById( "nameId2" ).color="red";
}
}
}
function processResult(){
// 获得应答内容 ,把应答内容显示在网页上
var span = document.getElementById( "msgId" ) ;
span.innerHTML = xhr.responseText ;
}
AjaxAction.java
package com.test.action;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringBufferInputStream;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class AjaxAction extends ActionSupport {
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
public String execute() throws Exception {
return SUCCESS;
}
public String checkUser() throws Exception {
HttpServletRequest request = null;
request = ServletActionContext.getRequest();
// 获取 ajax 传递的 name 参数值
Object name = request.getParameter("name");
System.out.println("name=>" + name);
// 返回 StringBufferInputStream 对象,新的 jdk 里面已经不推荐使用,但推荐使用的 StringReader
// 并不是 InputStream 接口的实现类,这个比较蛋疼,可以使用下面 test 里面其他的实现类来传递
inputStream = new StringBufferInputStream(transcoding("struts2 返回 哈哈"));
return SUCCESS;
}
public String test() throws Exception {
// 返回 ByteArrayInputStream 对象至前台,注意跟上面的编码上的区别
inputStream = new ByteArrayInputStream("乱码测试".getBytes("utf-8"));
return SUCCESS;
}
private String transcoding(String str) {
try {
return new String(str.getBytes("utf-8"), "iso-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
}
struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"></include>
<package name="hello" extends="struts-default">
<action name="helloworld" class="com.test.action.HelloWorldAction">
<result>/result.jsp</result>
</action>
</package>
<package name="ajax" extends="struts-default">
<action name="ajax_*" class="com.test.action.AjaxAction" method="{1}">
<result>/page/ajax/ajax.jsp</result>
<result type="stream">
<param name="inputName">inputStream</param>
</result>
</action>
</package>
</struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Struts2Demo</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
com.test.filter.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
上面配了一个自定义的过滤器,主要处理页面提交的中文编码问题的,本例中可以不用,struts2 当中也是有自带的中文过滤器的,这个自定义的过滤器也顺便贴出来了
SetCharacterEncodingFilter.java
package com.lizanhong.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
里面的代码尽量省略,应该可以看到最原始的交互过程了。
分享到:
相关推荐
commons-beanutils-1.7.0.jar,commons-collections-3.1.jar,commons-lang-2.5.jar,commons-logging.jar,ezmorph-1.0.3.jar,json-lib-2.1-jdk15.jar,这六个jar包
使用Struts2和jQuery EasyUI实现简单CRUD系统,从零开始,从基础的ajax与Struts2的使用json格式进行交互开始。
jQuery是一个轻量级的JavaScript库,它简化了DOM操作、事件处理以及Ajax交互,使得开发者更容易实现复杂的前端效果和交互。 首先,我们需要了解Struts2中如何配置Action。在Struts2中,Action类是业务逻辑的载体,...
总的来说,Struts2和Ajax的结合使用使得Web应用能够提供更快速、更直观的用户交互,而这个代码和jar包组合可能就是实现这一目标的一个实例。通过阅读提供的文档和使用示例,你可以深入了解并实践这一技术,从而提升...
### Struts2的Ajax支持详解 #### Ajax概述与Struts2的融合 在现代Web2.0技术蓬勃发展的背景下,Ajax技术因其能够...通过掌握Struts2的Ajax支持,开发者可以轻松构建出具有高度交互性和良好用户体验的现代Web应用。
jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画效果以及Ajax交互等任务。 在这个例子中,我们使用jQuery的Ajax函数与Struts2进行交互。jQuery的$.ajax()方法可以创建一个Ajax请求,其参数...
使用Struts2和jQuery EasyUI实现简单CRUD系统,从零开始,从基础的ajax与Struts2的交互开始。
首先,我们需要了解Struts2与AJAX交互的基本原理。在AJAX中,JavaScript通常通过XMLHttpRequest对象与服务器进行异步通信,发送请求并接收响应。在Struts2框架下,我们可以利用Struts2的Action类和结果类型来处理...
jQuery则是一个轻量级、功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互。Ajax,全称Asynchronous JavaScript and XML,是一种在无需重新加载整个网页的情况下更新部分网页的技术。在这...
通过结合Struts2和AJAX,开发者可以创建更高效、交互性更强的Web应用程序。 在Struts2中实现AJAX,主要涉及以下几个关键点: 1. **Struts2 Action和Result**:首先,你需要创建一个Struts2 Action类,它将处理...
Jquery是一个高效的JavaScript库,简化了HTML文档遍历、事件处理、动画以及Ajax交互。它使得开发者能更便捷地操作DOM元素,创建动态网页效果。在Struts2中,Jquery可以与Ajax结合使用,实现页面的无刷新更新。 Ajax...
总结来说,"Struts2+Ajax实现的用户登录"是一个典型的Web开发场景,涉及到了前端的动态交互、后端的业务处理和持久化操作。Struts2提供了控制流程,Ajax实现了无刷新的用户交互,Sprint协助管理应用程序组件,而...
学习Struts 2和AJAX框架的组合,有助于开发者构建出响应快速、交互性强的Web应用。Struts 2的强大功能和AJAX的动态特性,使得开发者可以更好地满足用户需求,提升应用的性能和用户体验。在实际开发中,深入理解和...
Struts2的AJAX支持并不是从零开始创建一个新的AJAX框架,而是选择了当时在Java EE平台上广泛使用的AJAX库,如Dojo和Direct Web Remoting (DWR)。这样做不仅可以利用已有的成熟技术,同时也降低了学习曲线,使得...
**Struts2与Ajax交互** 在Struts2中,可以通过配置Action来处理Ajax请求。Action类中的方法可以返回一个值,这个值可以映射到一个视图,也可以是JSON字符串。使用`@Result`注解或struts.xml配置文件,可以指定一个...
Struts2是一个强大的Java web框架,它为开发者...总之,Struts2通过其AJAX插件,为开发者提供了便捷的方式来集成AJAX,提高了Web应用的交互性和响应速度。通过学习和掌握这些功能,可以有效地提升Web应用的用户体验。
Struts2是一个非常流行的Java Web框架,它提供...通过以上步骤,开发者可以在Struts2框架下轻松地实现Ajax功能,提高Web应用的交互性和用户体验。理解并熟练掌握这些知识点,对于开发高效、用户友好的Web应用至关重要。
【标题】"ZTree+Struts2+ajax+json实现checkbox权限树"涉及的技术栈主要集中在前端的ZTree,后端的Struts2框架,以及数据交互中的Ajax和JSON。这个项目的核心目标是构建一个可复选的权限树形结构,用户通过勾选节点...
Java Web整合开发是构建Web应用程序的...通过学习和实践,你可以掌握如何在Eclipse环境中搭建Java Web开发环境,使用Struts 2框架组织应用结构,以及利用Ajax优化交互体验。这将为你在Java Web开发领域打下坚实的基础。
首先,jQuery是一个轻量级、功能丰富的JavaScript库,它简化了DOM操作、事件处理、动画效果以及Ajax交互。在Ajax方面,jQuery提供了$.ajax()、$.get()、$.post()等方法,使得发送异步请求变得简单易用。 在Struts2...