samwellwang

samwellwang

coder
twitter

JSP 常见问题

本文收集了在 MVC 开发过程中 JSP 开发遇到的一些常见问题

2019-11-21

本文收集了在 MVC 开发过程中 JSP 开发遇到的一些常见问题

变量声明#

必须先声明,后使用,不允许使用未经过声明的变量;

正确

var myVar = 3

~ 错误~

myVar = 3 //IE8及以下会保存,高级浏览器会产生全局变量,影响逻辑

JSON#

JSON 是什么#

JSON (JavaScript Object Notation) 即 JavaScript 对象表示法。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。

JSON 结构是什么?#

JSON 简单说就是 javascript 中的对象和数组,通过这两种结构可以表示各种复杂的结构;
对象:对象在 js 中表示为 “{}” 括起来的内容,数据结构为 {key:value,key:value,…} 的键值对的结构。
数组:数组在 js 中是中括号 “[]” 括起来的内容,数据结构为 [“java”,”javascript”,”vb”,…]。
经过对象、数组 2 种结构就可以组合成复杂的数据结构了。

PS:这个网站可以处理 JSON 的常见问题,校验,格式化、去转义等等
SoJSON

前台如何操作 JSON?#

JSON 对象 -> JSON 字符串(比如:发起请求前,将 JS 对象转换为可传输的字符串时)

JSON字符串->JSON对象(比如:接收服务器返回值,准备在浏览器端解析时)
``` jObj = JSON.parse(jStr);

后台如何操作 JSON?#

包依赖:org.json.JSONArray、org.json.JSONObject 直接构造 JSON 对象

JSONArray jArr = new JSONArray();  // 简单的JSON数组 
jArr.put(“小明”);
jArr.put(“小强”);
JSONObject jObj = new JSONObject();// 简单的JSON对象
jObj.put(“age”, 12);
jObj.put(“xb”, “男”);
jObj.put(“xb”,  jArr); // 嵌套使用
JSON串->JSON对象
JSONArray jArr = new JSONArray(jArrStr);
JSONObject jObj = new JSONObject(jObjStr);
JSON对象->JSON串
String jArrStr = jArr.toString();
String jObjStr= jArr.toString();

同步方法和异步方法#

同步方法#

同步方法是方法执行完成后才返回,然后执行下面的方法。

异步方法#

异步方法立即返回,然后执行下面的方法,与该方法执行完成所需的时间无关,通过回调函数可以知道该方法是否执行完成。

![][img-1]

示例#

正确方式

function SaveGrid() {	//其中saveData为异步方法 
    saveData("demo.do?method=addRowData", synchFillGrid);  
}  
function synchFillGrid() { 
    synchFillData("demo.do?method=refreshMyTags", "grid:vdsdw"); 
}

错误使用方式 1:想传入一个回调函数,但调用了它

function SaveGrid() {	//其中saveData为异步方法 
    saveData("demo.do?method=addRowData",synchFillGrid()); 
}

错误使用方式 2:没有在异步方法的回调函数中干后续操作;

function SaveGrid() {	//其中saveData为异步方法 
    saveData("demo.do?method=addRowData");//执行asynchFillData时,saveData方法还未执行完呢!               
    asynchFillData("demo.do?method=refreshMyTags", "grid:vdsdw");  
    
}

错误使用方式 3:按照调用同步 JS 调用的方式,接收返回值;

function SaveGrid() {   //     异步方法的返回值,不能用同步方式接收 
   var result = AjaxUtil. asynchAjaxRequest("demo.do?method=addRowData");  
   if(!AjaxUtil.checkException(result)){    
  	   AjaxUtil.showException(result);        return false
   } 
    
}

如何在框架中用展示图片#

JSP

<%@ page contentType="text/html;charset=GBK"language="java"%> 
<%@ taglib uri="darewayBS.tld" prefix="dw"%>
<%@ page 
import="com.dareway.framework.util.StringUtil" %>
<% 
    String uuid = (String)StringUtil.getUUID();
%> 
<dw:body>	 
<dw:diy>		 
<img id="img<%=uuid%>"/> 
</dw:diy>	 
</dw:body><script type="text/javascript" defer="defer">			getImg(); 
</script><script type="text/javascript">	
function getImg(){		
	$("#img<%=uuid%>")[0].src = GlobalNames.compileUR("demo.do?method=getImg");	
}</script>

Controller

public ModelAndView getImg(HttpServletRequest request,			HttpServletResponse response, DataObject para) throws Exception {	 
	    byte[] bytes = null; 
	    FileInputStream fis = null;	 
	    ByteArrayOutputStream baos = null; 
    	try {			// 1. 获取图片的字节流数组(此处例子为直接读取的文件;实际可从数据库或其它方式获取;)	 
	        fis = new FileInputStream("F:/威海结算章.png");	 
        	baos = new ByteArrayOutputStream();		 
	        int i = 0;	 
	        byte[] buffer = new byte[2048];		 
        	while ((i = fis.read(buffer)) != -1) {	 
            	baos.write(buffer, 0, i); 
	        }		 
	        baos.flush();	 
        	bytes = baos.toByteArray();		 
	        // 写图片回浏览器		 
        	response.setContentType("image/png");	 
        	response.getOutputStream().write(bytes); 
        	} catch (Exception e) {	 
	            e.printStackTrace();	 
	        } finally {		 
	        if(fis != null){	 
	        fis.close();	 
	        }					 
	        if(baos != null){	 
            	baos.close();		 
        	}	 
	}	 
	return null; 
}
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。