JSP(二)
一、pageContext对象
1》代表当前JSP页面的运行环境, 【作用域仅仅局限于当前JSP页面中,出了该JSP页面, 原PageContext域对象被销毁】
2》封装了对其它8大隐式对象的引用
3》它自身是一个域对象
4》封装了web开发中经常设计的一些常用操作:包含和跳转等。
一】重点方法:
1》转发:
forward("资源path");
2》包含:
include("资源path");
2》设置值
方法一: setAttribute("属性","属性值",要放入的域对象);
域对象:【从小到大的域对象】
PageContext.PAGE_SCOPE;//默认
PageContext.REQUEST_SCOPE;
PageContext.SESSION_SCOPE;
PageContext.APPLICATION_SCOPE;
方法二: setAttribute("属性","属性值");//【默认为存入PAGE域,即当前页面】
3》取值
方法一: 【对应域】.getAttribute("属性");
eg:
request.getAttribute("name");
方法二: pageContext.getAttribute("属性值",域对象);
eg:
<%=pageContext.getAttribute("name",PageContext.SEESION_SCOPE)%>
4》删除值
方法一:
void removeAttribute("属性");
方法二 :
void removeAttribute("属性",int scope);
5》findAttribute方法【特别重要,先后查找各个域中的属性值】
以属性为key,依次去四个域对象中查询对应的值,找到为止,找不到返回null。
方法原型:
Object findAttribute("属性");
查找顺序:由小到大
PAGE_SCOPE --> REQUEST_SCOPE --> SESSION_SCOPE --> APPLICATION
二】细节:
1》pageContext域对象仅限于当前jsp页面中,除了该jsp页面,原pageContext域对象销毁,如果取不到值,返回null。
2》pageContext域对象可以将对应的值保存在指定的四个域对象之一。
eg:
pageContext.setAttribute("name","jack",PageContext.APPLICATION_SCOPE);
or
request.setAttribute("name","jack");
取属性值的时候:
pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);
or
<%=request.getAttribute("name")%>
二、内置标签【非javabean标签】
---美化+业务逻辑
作用:为了取代<%%>脚本形式,使用JSP标签/JSP动作,美化JSP页面,使其都是由标签组成,不再有其它的内容
一】<jsp:include page="path" flush="ture | flush" />
注意:
1》是动态包含,会生成多个Servlet对象,N个jsp文件生成N个Servlet
2》翻译后的结构良好
3》【重点】是动态包含,相当于函数调用,是在运行时包含。
4》flush:指定在插入其它资源的输出内容时,是否先将当前JSP页面的
输出内容刷新到客户端,再加入包含的页面。默认为false.
如果为false则按照页面的顺序,无优先级之说。
比较:
动态引入(执行时引入): <jsp: include page="path"/>
静态引入(翻译时引入): <%@ include file="path" %>
二】<jsp:forward page="path" />
-----用于把请求转发给另一个资源。
即:转发到page所指向的JSP页面。
三】<jsp:param name="" value="" />
eg:
<jsp:param name="name" value="jack" />
注意:<jsp:param>需要结合<jsp:include>和<jsp:forward>使用, 主要作用是提供参数
<jsp:forward page="/to.jsp">
<jsp:param name="name" value="jack">
<jsp:param name="password" value="123">
</jsp:forward>
总结:
【重点】
POST传中文到服务器:
开头设置: request.setEncodingCharactor("UTF-8");
GET传中文到服务器:
1》基本标签:<a><form>中:
编码URLEncoder 解码 getBytes("ISO8859-1");-->new String(byte[], "UTF-8")
2》JSP内置标签:
编码URLEncoder 解码 URLDecoder
eg:
客户端:编码中文
<jsp:forward page="/to.jsp">
<jsp:param name="username" value="<%=URLEncoder.encoder("杰克", "UTF-8")%>">
<jsp:param name="password" value="123">
</jsp:forward>
服务端(解码中文):
基本标签————
<%
String username = request.getParameter("username");
byte[] buf = username.getBytes("ISO8859-1");
username = new String(buf, "UTF-8");
%>
内置标签
<%
String username = request.getParameter("username");
username = URLDecoder.decod(username, "UTF-8");
%>
三、映射JSP
1》通过修改web.xml文件,可以将其伪装成html页面。
code:
<servlet>
<servlet-name>qq</servlet-name>
<jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>qq</servlet-name>
<url-pattern>/qq.html</url-pattern>
</servlet-mapping>
2》在<servlet></servlet>中添加<init-param>标签,再通过JSP内置对象config获取初始化参数
code:
<servlet>
<servlet-name>qq</servlet-name>
<jsp-file>/index.jsp</jsp-file>
<init-param>
<param-name>emial</param-name>
<param-value>jack12@163.com</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>qq</servlet-name>
<url-pattern>/qq.html</url-pattern>
</servlet-mapping>
=====================
<%= config.getInitParameter("email")%>
四、JSP常见错误
一】语法错误
<%= 表达式%> //注意:表达式后面不要加;
二】语法无错,但翻译成Servlet后出错。
如:自己定义了一个和内置对象同类型同名称的变量。
三】逻辑出错
五、javaBean标签
一】<jsp:useBean>标签:用于在JSP页面中查找或创建一个对应的JavaBean对象
<jsp:useBean id="stu" class="cn.itcast.web.jsp.Student" scope="page | request | session | application">
实质:
1》会调用javaBean对象的构造方法,构造一个Bean对象
2》将创建好的Bean对象存入域对象中
3》但是,如果在域对象中有对应的JavaBean对象存在,那么该标签就只会查找该JavaBean对象而不会创建和绑定。
id代表两个意思:
1》绑定到域对象的名称。
2》Student类对象的引用。
注意:
1》在标签中,pageContext和page等价:
1>在JSP的脚本文件中,要使用pageContext;
2>而在JSP标签中则使用page.
二】<jsp:setProperty>标签:设置一个JavaBean对象的属性
实质:
会翻译成调用setXxx()方法,去设置响应的值
格式:
【三种方式:】
<jsp:setProperty name="beanName"
property="propertyName" value="属性值" //直接设置值
or
property="propertyName" param="paramerName" //根据参数赋值
or
property="*" //只有当bean属性和传进的参数完全一样的时候,会自动反射给JavaBean
/>
三】<jsp:getProperty>标签:获取一个JavaBean对象的属性值。
实质:调用bean对象的getXxxx()方法
格式:
<jsp:getProperty name="beanName" property="字段名">
code:
<%-- 创建/查找Bean对象 --%>
<jsp:useBean id="stu" class="cn.itcast.web.jsp.Student" scope="session" />
<%--设置值【通过value】
<jsp:setProperty name="stu" property="name" value="tian" />
<jsp:setProperty name="stu" property="age" value="23" />
<jsp:setProperty name="stu" property="salary" value="10000" />
--%>
<%--设置值【通过param】 --%>
<jsp:setProperty name="stu" property="name" param="n" />
<jsp:setProperty name="stu" property="age" param="a" />
<jsp:setProperty name="stu" property="salary" param="s" />
<%--获取值 --%>
name:
<jsp:getProperty name="stu" property="name" />
<br /> age:
<jsp:getProperty name="stu" property="age" />
<br /> salary:
<jsp:getProperty name="stu" property="salary" />
<br />
六、JSP的开发模式
一】开发模式一:
JSP(V)+JSP(C)+JavaBean(M):适合逻辑简单的
二】开发模式二:
JSP(V)+Servlet(C)+JavaBean(M):适合逻辑复杂的。
补充:
通过BigDecimal的 BigDecimal setSacle(int newScale, int roundingMode)方法可以设置小数点的精确度。
newScale:保留的精确度
roundingMode:进行精确度处理的方式(四舍五入等......)
code:
BigDecimal bd = new BigDecimal(this.result).setScale(2, BigDecimal.ROUND_HALF_UP);小数点后保留两位
double result = bd.doubleValue();
七、EL表达式和JSTL标签快速入门
一】EL="Expression Language"
注意:<%@page isELIgnored="false/true"> //只有值为false时候浏览器才会解析EL表达式,否则原样输出
作用:
1》快速解析域对象并输出JavaBean的值,或者普通变量的值
code:
<%
Address address = new Address();
address.setLocation("雅安—天全");
address.setZipcode("625501");
Student s = new Student();
s.setAddress(address);
s.setName("jack");
s.setAge(21);
s.setSalary(7500);
session.setAttribute("Stu", s);
%>
<%-- EL表达式 --%>
用户名:${Stu.name} <br />
年龄:${Stu.age} <br />
薪资:${Stu.salary} <br />
地址:${Stu.address.location} <br />
邮编: ${Stu.address.zipcode} <br />
2》用于进行简单的逻辑判断
10>5 吗? ${10>5}<br />
10=5 吗? ${10 == 5}<br />
10<5 吗? ${10 < 5} <br />
二】JSTL=Java Standard Taglib Language
作用:快速输出动态内容,以替换JSP页面中的脚本<%%>代码
code:
<%
ArrayList<String> al = new ArrayList<String>();
al.add("java");
al.add("XML");
al.add("servlet");
al.add("JSP");
request.setAttribute("AL",al);
%>
<table border="1px" align="center">
<tr>
<th>书名</th>
<th>操作</th>
</tr>
<c:forEach var="S" items="${AL}">
<tr>
<td>${S}</td>
<td>购买</td>
</tr>
</c:forEach>
</table>
code:用于遍历map集合
<%
Map<Integer, String> map = new linkedHashMap<Integer, String>();
map.put(1, "java");
map.put(2, "xml");
map.put(3, "servlet");
map.put(4, "jsp");
pageContext.setAttribute("MAP", map);
%>
<c:forEach var="entry" items="${MAP}">
${entry.key}
${entry.value}
</c:>
补充:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c">
注意事项:
1》需要将对象绑定到域对象中,并保证该域对象没有销毁,因为EL只会从域对象中检索对应的值
2》JSTL和EL经常会绑定到一起用。
补充:
HTML两个重要事件:
获取焦点事件:onfocus
失去焦点事件:onblur
JSP(二)的更多相关文章
- 浅谈JSP(二)
一.EL表达式 作用:从作用域(pageContext,request,session,application)中取值,并显示在页面中. 本质:用于替换输出脚本(<%= %>). 1.从作 ...
- jsp二(指令)
一.jsp动作标签: 1)<jsp:forward> 请求转发 相当于之前的request.getRequestDispatcher(..).forward(..); <!--jsp ...
- 菜鸟日记之JSP二 内置对象的理解
·最近学习JSP了,对编程和网络又有了一些理解.无论是现实中人与人的交流,还是网络世界的接触,都是在相互表达自己的意思让别人知道,并理解对方的信息.然后我们知道的事情不断的变多,会又交杂出新的内容,不 ...
- jsp (二) 练习
package cn.sasa.serv; import java.io.IOException; import java.sql.SQLException; import java.util.Lis ...
- JavaWeb学习之JSP(二) JSP标签
JSP常用标签 什么是JSP标签 JSP标签,有的地方也叫做JSP动作,在JSP中编写大量的java代码会使JSP页面显得杂乱无章,看起来非常不舒服,因此JSP提供了一些类似html的标签,通过这些标 ...
- 一、 JSP概述 二、JSP的语法结构 三、JSP内置对象
一.JSP概述###<1>概念 java服务器页面 可以编写动态页面 其内部是以HTML标签为主,可以在HTML标签嵌套java代码 jsp文件以.jsp为后缀 jsp本质上就是一个Ser ...
- 在jsp中常用的内置对象(5个)小总结和两种页面跳转方式(服务器端调转、客户端跳转)的区别
jsp中常用的几个内置对象: 一.request对象 主要作用: (1)获取请求页面的信息 比如:request.getParameter("参数名"); (2)获取客户端 ...
- 【转】JSP总结
day1 JSP 定义: 1)Java Server Page, Java EE 组件,本质上是 Servlet. 2)运行在 Web Container.接收 Http Reques ...
- jsp中的forward和redirect的区别
转自http://blog.163.com/tsing_hua/blog/static/139622224201101110836644/ 一.调用方式 我们知道,在servlet中调用转发.重定向的 ...
随机推荐
- android http协议post请求方式
方式一:HttpPost(import org.apache.http.client.methods.HttpPost 代码如下: private Button button1,button2,but ...
- Spring 定时任务之 @Scheduled cron表达式
一个基于Spring boot的一个demo: Java配置中开户对Scheduled的支持 import org.springframework.context.annotation.Configu ...
- layer iframe层的使用,传参
父层 <div class="col-xs-4 text-left" style="padding-left: 50px;"><button ...
- BZOJ3392: [Usaco2005 Feb]Part Acquisition 交易
3392: [Usaco2005 Feb]Part Acquisition 交易 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 26 Solved: ...
- 【转】C++读写二进制文件
原文网址:http://blog.csdn.net/lightlater/article/details/6364931 摘要: 使用C++读写二进制文件,在开发中操作的比较频繁,今天有幸找到一篇文章 ...
- strcpy完整版 与 strcpy为什么有返回值
一个标准的strcpy函数: 原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了. 下面给出网上strcpy的得分版本: 2分 void strcpy( char *strDest, cha ...
- MSSQL 生成有意义的PROC
MSSQL 生成有意义的PROC --MSSQL 用PROC 生成有意义的单号:如WP200011101 GO/****** 对象: Table [dbo].[tbl_SequenceNum] ...
- JS中事件代理与委托
在javasript中delegate这个词经常出现,看字面的意思,代理.委托.那么它究竟在什么样的情况下使用?它的原理又是什么?在各种框架中,也经常能看到delegate相关的接口.这些接口又有什么 ...
- Javascript:简单拖拽效果的实现
核心代码: /* *完成一个拖拽事件由三大事件组成: *1:onmousedown:选择元素 *2:onmousemove:移动元素 *3:onmouseup:释放元素 */ function dra ...
- xml的加密和解密
xml加密(XML Encryption)是w3c加密xml的标准.这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留. 介绍我们有3个 ...