Struts是一个基于 MVC 模式的轻量级 Web 框架,自从它推出以来,就受到了很多java开发者的欢迎,因此struts在开发领域中也是占了很重要的位置,那struts怎么用ajax实现上传?下面来我们就来给大家讲解一下。
需要的东西:struts2-json-plugin-2.2.1.jar、jquery.js和ajaxfileupload.js
上传文件的fileUpload.jsp
Java代码
<%@ page language="java" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <base href="<%=basePath%>" /> <title>Excel导入</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- div(文件上传)css --> <link href="css/fileDiv.css" rel="stylesheet" type="text/css" /> <!-- 一定要注意js加载的前后顺序,先加载jquery再加载ajaxfileupload --> <script type="text/javascript" src="jscript/jquery.js"></script> <script type="text/javascript" src="jscript/ajaxfileupload.js"></script> <!-- div(文件上传)js --> <script type="text/javascript" src="jscript/fileDiv.js"></script> <script type="text/javascript"> function ajaxFileUpload() { //starting setting some animation when the ajax starts and completes $("#loading") .ajaxStart(function(){ $(this).show(); }) .ajaxComplete(function(){ $(this).hide(); }); /* prepareing ajax file upload url: the url of script file handling the uploaded files fileElementId: the file type of input element id and it will be the index of $_FILES Array() dataType: it support json, xml secureuri:use secure protocol success: call back function when the ajax complete error: callback function when the ajax failed */ $.ajaxFileUpload ( { url:'management/excel_Operation!importExcelWms.jspx', secureuri:false, fileElementId:'file', dataType: 'json', data: {//加入的文本参数 module_number: "${module_number}", right: "${right}" }, success: function (data) { alert(data.message); }, error: function (data, e) { alert("错误信息:"+e); } } ) } </script> </head> <body> <!-- 文件上传div --> <div class="fileDiv" id="fileDiv"> <div class="fileDiv-top">数据导入</div> <form action="" id="fileForm" method="post" enctype="multipart/form-data"> <div class="fileDiv-search"> 请选择文件:<input type="file" name="file" id="file" class="input-normal"/><br /> <div class="fileDiv-button"> <img alt="" src="img/loading.gif" id="loading" style="display: none; width: 50px; height: 50px"/> <a class="button-white" href="javascript:operate('management/excel_Operation!downloadExcel.jspx');"><span>模板下载</span></a> <a class="btn-lit" id="btn_upload" name="btn_upload" href="javascript:ajaxFileUpload();"><span>开始导入</span></a> <a class="button-white" href="${backUrl }"><span>返回</span></a> </div> </div> <input type="hidden" name="module_number" id="module_number" value="${module_number }"/> </form> <div class="fileDiv-content"> 为减少错误,请在导入数据前下载最新Excel模板!<br /> 说明<br /> 1、淡黄色代表该字段(必填)<br /> 2、淡橙色代表该字段有代码表(必填)<br /> 3、淡绿色代表该字段有代码表(选填) </div> </body> </html>
Excel_OperationAction部分处理方法
Java代码
// 模块导入-wms public void importExcelWms() { JSONObject jsonObj = new JSONObject(); String module_number = getRequest() .getParameter("module_number"); String right = getRequest() .getParameter("right"); HttpSession session = getRequest() .getSession(false); UserDto userDto = (UserDto) session.getAttribute("USER_INFO"); String table_dm = new ExcelReader() .findName("table_dm", module_number);; String view_dm = module_number; String mk_dm = module_number; InputStream is = null; if (file == null) { jsonObj.put("message", "没有选择文件,请选择要导入的文件!"); write(jsonObj.toString()); return; } try { is = new BufferedInputStream(new FileInputStream(file)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } String msg = new String(); if (!Utils.isValidString(table_dm) || !Utils.isValidString(view_dm) || !Utils.isValidString(mk_dm)) { jsonObj.put("message", "模块信息有误,请重新导入(如果多次不成功,请与管理员联系)!"); write(jsonObj.toString()); return; } else { msg = new ExcelReader() .excelImportWms(table_dm, view_dm, mk_dm, is, userDto); } try { if (is != null) { is.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } jsonObj.put("message", msg); write(jsonObj.toString()); return; }
write方法:
Java代码
/** * 功能描述:页面输出 * * @param content * 输出的内容 */ protected void write(String content) { if (content != null) { HttpServletResponse response = getResponse(); response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); try { response.getWriter() .println(content); response.getWriter() .flush(); response.getWriter() .close(); } catch (IOException e) {} } }
struts执行流程是什么?
1)首先客户端浏览器发送一个请求(HttpServletRequest)。
2)接着程序会调用 StrutsPrepareAndExecuteFilter,然后询问 ActionMapper 这个请求是否需要调用某个 Action。
3)如果 ActionMapper 决定需要调用某个 Action,StrutsPrepareAndExecuteFilter 会把请求的处理交给 ActionProxy。
4)ActionProxy 通过配置管理器(Configuration Manager)从配置文件(struts.xml)中读取框架的配置信息,从而找到需要调用的 Action 类。
5)ActionProxy 会创建一个 ActionInvocation 的实例。
6)ActionInvocation 使用命名模式调用 Action,在调用 Action 前,会依次调用所有配置的拦截器(Intercepter1、Intercepter2……)。
7)一旦 Action 执行完,则返回结果字符串,ActionInvocation 就会负责查找结果字符串对应的 Result,然后执行这个 Result。通常情况下 Result 会调用一些模板(JSP 等)呈现页面。
8)产生的 Result 信息返回给 ActionInvocation,在此过程中拦截器会被再次执行(顺序与 Action 执行之前相反)。
9)最后产生一个 HttpServletResponse 的响应行为,通过 StrutsPrepareAndExecuteFilter 反馈给客户端。
这就是Struts的执行流程,Struts是一个开源框架,使用它能够提高开发效率,并且也能够很好的解决开发项目问题!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。
推荐阅读: