呕心沥血,拒绝水货,Jsp结和js做前端开发经验<二>

写在前面,程序开发中有难点,需要花时间去思考,但项目时间是有限的,怎么能在工作中挤出时间思考大问题是关键,我们讲有经验的开发人员为什么好?因为他能提高开发的“命中率”,何为“命中率”?就是根据自己掌握的经验去判断某处代码应该怎么写,不用调试都基本能保证这行代码写出来就是是正确的。我们需要在平时的学习中记住和总结知识,让我们看到某个功能就能写而不用去百度上去搜资料,也不用去看其它某处代码是不是这么写的,随手就能写出,至少要保证大部分简单的功能都能信手拈来,命中率提高了,只要测试一遍即可通过,而不用像大部分人那样每开发一个小功能就要验证一下是不是正确,更有甚者不断反复测试某行代码,一步步设断点调度,明显拖慢速度。所以基本知识我们必需牢记于心。而且要形成自己的代码风格和代码知识库。


1.   在JSP里写java代码必需使用scriptlet标记出来,script是脚本的缩写,let是小程序的缩写,在JPS里有3种。

1.1        <%!%>

定义全局变量,类和方法,不般不用,因为不会在jsp里定义类和方法,

1.2        <%%>

定义局部变量,编写的程序语句等,该标签和<jsp:scriptlet></jsp:scriptlet>作用一样,建议使用<jsp:scriptlet></jsp:scriptlet>,为了代码整洁。只适合取request,session的数据再做逻辑,而像ModelAndView传的数据没办法取然后使用。

1.3        <%=表达式%>

输出变量值,虚拟机会把表达式求值转化成String,所以该标签可以放在任何地方,不区别是不是HTML标签。jsp里强烈建议使用该标签而不使用out.println();。


2.jsp里导入class命令:<%@pageimport=”类路径”%>


3.编码方式设置:

使用contenType指定MIME类型,即服务器发给客户端的内容编码,比如contenType=”text/html,charset=GBK”,通过指定MIME类型可以指定浏览器处理返回的页面的处理方式,比如视做html显示,比如当做doc文件下载等,而pageEncoding是JSP页面本身的编码,比如pageEncoding=”UTF-8”,一般JSP开头都是:<%@pagelanguage=”java” contenType=”text/html,charset=UTF-8” pageEncoding=”UTF-8”%>.

ps:在Tomcat /conf/web.xml里有MIME类型,使用频率较少。


4.引入外部文件:

静态包含:将被包含的文件先引进来再一起编译。即先包含后编译

<%@ include=”路径”%>,可以包含html,jsp,txt,htm

动态包含: 先将被包含的文件编译后再引进来编译

<jsp:includepage=”{要包含的文件||<%=表达式%>}” flush=”ture|false”>, flush默认是true,每个jsp页面都有buffer,true表示当buffer满了就输出。为false表示这个网页被完全读进来以后再输出。

一般我们使用动态包含,因为如果是静态页面html时,原样读取和静态包含没区别,如果是jsp的话,那么会先编译jsp页面再读取去,而且如果出现重复的变量不会出现任务问题。


5.页面跳转

服务器跳转:

<jsp:forward/>标签用处不大,如果用的话是使用request.getRequestDispatcher("").forward(request, response);方法。

 

客户端跳转:

response.setHeader(“refresh”,”2:url”);//2秒后跳转到url页面,如果没有url则刷新当前页面

response.sendRedirect(“url”);


6. 4种属性范围:

page: javax.servlet.jsp.PageContext的实例,只在一个页面中保存属性,跳转之后无效,无论服务器还是客户端跳转。

request:javax.servlet.http.HttpServletRequest的实例,只在一次请求中保存,服务器跳转后依然有效。

session:javax.servlet.http.HttpSession的实例,在一次会话范围中,无论服务器还是客户端跳转都有效,但新开浏览器无效。

application:javax.servlet.ServletContext的实例,在整个服务器上都有效,保存所以用户的共享信息。

每个属性范围提供的方法,当然还有其它的方法:

setAttribute(Stringname,Object o)

getAttribute(Stringname)

removeAttribute(Stringname)

也可以使用page属性范围设置其它的属性范围值。比如

pageContext.setAttribute(Stringname,Object o,PageContext.REQUEST_SCOPE); 等同于request. setAttribute(String name,Object o);

pageContext(Stringname,Object o,PageContext.SESSION_SCOPE);等同于

session. . setAttribute(Stringname,Object o);

pageContext(Stringname,Object o,PageContext.APPLICATION_SCOPE);等同于

application. setAttribute(Stringname,Object o);


7.页面跳转取值

取单个值 ,比如前一个页面传的是单值:

<input type=”text”value=”陈哥”/>

取值方式:String name = request.getParameter(“name”);

取多个参数值,比如前一个页面传的是复选框

<input type=”checkbox”name=”**name” value=”吃苹果”/>

<input type=”checkbox”name=”**name” value=”吃梨子”/>

<input type=”checkbox”name=”**name” value=”吃西瓜”/>

取值方式:String name[] = request.getParameterValues(“**name”);

ps:凡是以“**”开关的都按照数组的形势接收


8.查看jsp页面缓冲区

out.getBufferSize();返回jsp中缓冲区的大小

out.getRemaing();返回jsp中未使用的缓冲大小


9.javaBean作用只是接收传入参数然后在JSP页面里使用,我觉得作用不大,完全可以用${}代码。


10.EL:expression Language 表达式语言 ${属性名},可以方便的访问标志位中的属性内容,分别有page(pageContext),request,session,application4种标志位。如果输出的内容是null,会自动转化成””空字符串。

el里的内置对象:

pageConcontext:javax.servlet.jsp.PageContext实例

pageScope:从page属性范围查找属性内容

requestScope:从request属性范围查找属性内容

sessionScope:从session属性范围查找属性内容

applicationScope:从application属性范围查找属性内容

param:接收传递到本jsp页面的参数,功能与request.getParameter()类似。

paramValues:接收传递到jsp页面的一组参数,比如${paramValues.参数名[0|1|2|...]}

header:取得一个头信息数据

headerValues:取出一组头信息数据

cookie:取出cookie中的数据

initParamm:取得配置的初始化参数


11.取出指定属性范围内的属性内容:

${pageScope.属性名}

${requestScope.属性名}

${sessionScope.属性名}

${applicationScope.属性名}


12.有用的核心标签库:

<c:out/>:输出内容,可以用${}代替,当然<c:out/>可以设置默认值。

语法:<c:outvalue=”” default=”默认值” escapeXml=”是否忽略xml标签’>’和’<’,默认是tue”/>

<c:if/>:单个条件判断,

语法:没有标签体,<c:iftest=”判断条件” var=”存储判断结果” [scope=”page|request|session|application”]/>

有标签体,<c:iftest=”判断条件” var=”存储判断结果” [scope=”page|request|session|application”]>

满足条件时执行的语句

</c:if>

 

<c:choose/><c:when/><c:otherwise/>:多条件判断

比如:<c:choose>

<c:whentest=”${name==”张三”}”>

      <h2>我是张三</h2>

    </c:when>

<c:when test=”${name==”李四}”>

      <h2>我是李四</h2>

    </c:when>

<c:otherwise>

      <h2>他们都是假的,是我王五</h2>

</c:otherwise>

 

</c:choose>

<c:forEach>:遍历集合,如list,Array,set,Map

语法:<c:forEach[var=”每个对象属性名称”] items=”集合名” [varStatus=”保存相关成员信息,比如index” ] [begin=”集合开始位置”] [end=”集合结束位置”] [step=”每次增长的长度,默认是1”]>

执行的语句

</c:forEach>

 

其中list,set,array写法是一样的。比如有个list数据,写法如下:

<c:forEach var=”item”  items=”list” varStatus=”status”>

<h2>${status.index},${item}</h2>

</c:forEach>

 

Map有点特殊,写法如下:

<c:forEach items=”map” var=”item”>

${map.key},${map.value}

</c:forEach>

 

<:c:forTokens>:对字符串的拆分,类似split()的功能。

语法:<c:forTokens[var=”存放每个字符串变量”] items=”字符串数据” delims=”字符串分割符” [varStatus=”存放当前对象的相关信息”] [begin=”开始位置”] [end=”结束位置” [step=”步长”]]>

执行的语句

</c:forTokens>

例如:

<%

 String str=”I,love,you”;

%>

<c:forTokens items=”${str}” delims=”,”var=”com”>

${con}:

</c:forTokens>

输出结果是I:love:you

 

<c:url/><c:param/>构造url

语法:<c:urlvalue=”操作的url” [context=”上下文路径”] [var=”c:url的引用名,可借外部引用,用${var值}即可拿到该url”] [scope=”[page|request|session|application]”]>

<c:paramname=”参数名” value=”参数值”/>

</c:url>

 

我觉得就这几个核心标签库有用,其它都是鸡肋。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值