JSP:本质是servlet,需要部署到servlet容器中才能工作, 浏览器发起对JSP的请求后(也可以是服务端通过一个controller做的redirect),JSP处理请求,输出一个HTML文档到客户端
HTML:静态资源,浏览器接收到HTML,根据HTML网页的内容,处理标签,加载资源,渲染网页
HTML(静态资源)可以部署到CDN(自己搭建或者购买)上实现访问加速,JSP显然不能
-------------
用HTML替换JSP
JSP可以非常方便的对入参进行处理,具备逻辑运算能力,客户端拿到的HTML是已经根据入参处理过的
HTML只能通过脚本定义行为,可以定义document.ready.callback 加载数据,处理通过URL带来的参数
如果想用HTML替换JSP,可以把JSP需要处理的参数添加为URL参数,然后通过HTML的document,ready.callback进行处理,向server发AJAX请求,获取数据,填充界面
---------------------------
JSP
很强大,里面什么都能写(java(逻辑),css,js,html),输出是HTML
关注脚本元素:
脚本元素是JSP代码中使用最频繁的元素,它是用Java写的脚本代码。所有的脚本元素均是以“<%”标记开始,以“%>”标记结束,它可以分为如下三类:声明、表达式、Scriptlet
声明:它是一段Java代码,可以声明变量也可以声明方法
表达式:以“<%=”标记开始,以“%>”标记结尾,中间的内容为Java一个合法的表达式
Scriptlet:是以“<%”标记开始,以“%>”标记结尾的一段Java代码
脚本元素中出现的所有内容都必须完全遵循JAVA语法
----------------------
JSP practice:
1 Jsp里面应当少写声明,尤其是变量,成员变量是带有状态的,并发容易出问题,如果需要声明的方法过多,可以专门写一个xxJspServlet类进行定义,然后引入到JSP中
2 JSP VS 模板引擎?
3 JSP里面不要写太复杂的逻辑,否则难以维护
4 spring MVC+JSP
controller里面进行业务处理,处理好了,把值传给JSP进行数据的展示,JSP里面用EL表达式获取参数的值,如:
reMap.put("personalOrCompany", personalOrCompany == UserType.CompanyMerchant?"2":"1");
reMap.put("merchantOrders", getMerchantOrders(userId));
reMap.put("userId", userId);
return WebResult.success("merchant.ucIndex.page",reMap,0,0);
$("#iconAvata").attr(
"src",
"<fmt:message key="USER_CDN" bundle="${cfgpts}"/>/user/avatar/queryMyAvata65/${userId}/nosrc/1?_merchant_user_id_=<%=request.getParameter("_merchant_user_id_")%>");
});
<c:if test="${fn:length(merchantOrders) >= 1}">
<div class="fl">
<div class="orderCode">订单编号:${merchantOrders[0].orderId }</div>
<div class="orderImg"><a href="<fmt:message key="m.order.domain" bundle="${dmnpts}"/>/order/seller/detail/${merchantOrders[0].orderId}.html?_merchant_user_id_=<%=request.getParameter("_merchant_user_id_")%>" target="_blank"><img src="${merchantOrders[0].productList[0].imgUrl}" alt="" /></a></div>
<dl>
<dt><a href="<fmt:message key="m.order.domain" bundle="${dmnpts}"/>/order/seller/detail/${merchantOrders[0].orderId}.html?_merchant_user_id_=<%=request.getParameter("_merchant_user_id_")%>" target="_blank">${merchantOrders[0].productList[0].productName }</a></dt>
<dd>
<em>${merchantOrders[0].productList[0].amountYuan }</em>
<span id="ordStatus${merchantOrders[0].orderId }">${merchantOrders[0].majorDesc }</span>
<!--<c:if test="${merchantOrders[0].status == 4}"><a id="orderSucc${merchantOrders[0].orderId }" href="javascript:orderSuccess(${merchantOrders[0].orderId });" class="setFH" target="_self">标记为发货</a></c:if>-->
</dd>
</dl>
</div>
</c:if>
5 just copy, mark 自己写的线上JSP
<%@ page pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="com.enterprise.web.filter.RequestContext"%>
<%@ page import="com.enterprise.web.filter.RequestContext.UserType"%>
<%@ page import="com.enterprise.web.filter.EmpMerchant"%>
<%
String servletPath=null;
HttpServletRequest sourceRequest=RequestContext.getContext().getHttpRequest();
if(sourceRequest!=null){
servletPath=sourceRequest.getServletPath();
}
String merchantUserId=null;
EmpMerchant merhcant=RequestContext.getContext().getEmpMerchant();
if(merhcant!=null){
merchantUserId=merhcant.getMerchantUserId().toString();
}
%>
<html>
<head>
</head>
<script type="text/javascript">
<%UserType userType=RequestContext.getContext().getUserType();
if(UserType.Waiter==userType&&servletPath!=null){ %>
window.top.location.href="http://enterprise.qbao.com/error.htm?initiator="+"<%=servletPath%>"+"&_merchant_user_id_="+"<%=merchantUserId%>";
<%}else{%>
window.top.location.href="${pageContext.request.contextPath}/account/accessDenied.html";
<%}%>
</script>
</html>