•
jsp <% 里面 用lamada表达式会有问题
•
out.println("") 输出
•
有一排景点,每个景点都有好几个酒店,下拉框里按距离降序排列附近酒店并自动选择里的最近的酒店.
<div class="form-group ">
<label>选择酒店</label>
<div class="row hotel-div">
<%
// request.getSession().getAttribute("tourist");
ArrayList<Tourist> tourists = (ArrayList<Tourist>) request.getAttribute("tourist");
ArrayList<Hotel> hotels = (ArrayList<Hotel>) request.getAttribute("hotels");
SortMap<Double, Hotel> sortContain = new SortMap<Double, Hotel>();
for (int i = 0; i < tourists.size(); i++) {
out.println("<div class=\"col-md-2 hotel-select-" + tourists.get(i).getName() + "\" style=\"display:none;\">");
out.println("<label>" + tourists.get(i).getName() + "</label>");
out.println("<select class=\"form-control \">");
sortContain.clear();
for (int j = 0; j < hotels.size(); j++) {
sortContain.put(RoundDistance.measureDistance(tourists.get(i), hotels.get(j)), hotels.get(j));
}
Map.Entry<Double, Object> entry = sortContain.firstEntry();
while (entry != null) {
Object value = entry.getValue();
if (value instanceof ArrayList) {
for (int j = 0; j < ((ArrayList) value).size(); j++) {
Hotel t = (Hotel) ((ArrayList) value).get(j);
out.println("<option value=" + t.getName() + ">");
// out.println(t.getName() + "<span class='myTag'>" + entry.getKey() + "</span>");
out.println(t.getName());
out.println("</option>");
}
} else if (value instanceof Hotel) {
Hotel t = (Hotel) value;
out.println("<option value=" + t.getName() + ">");
// out.println(t.getName() + "<span class='myTag'>" + entry.getKey() + "</span>");
out.println(t.getName());
out.println("</option>");
}
entry = sortContain.higherEntry(entry.getKey());
}
out.println("</select>");
out.println("</div>");
}
%>
</div>
</div>
<c:choose>
<c:when test="${item.child&&item.lady}">
{
label: "${item.name}<span class='myTag tagChild' style='display:none;'>不适合小孩</span><span class='myTag tagLady' style='display:none;'>不适合老人</span>",
value: "${item.name}",
disable: false
},
</c:when>
<c:when test="${!item.child&&!item.lady}">
{label: "${item.name}", value: "${item.name}", disable: false},
</c:when>
<c:when test="${item.child}">
{
label: "${item.name}<span class='myTag tagChild' style='display:none;'>不适合小孩</span>",
value: "${item.name}",
disable: false
},
</c:when>
<c:when test="${item.lady}">
{
label: "${item.name}<span class='myTag tagLady' style='display:none;'>不适合老人</span>",
value: "${item.name}",
disable: false
},
</c:when>
</c:choose>
jsp本质上就是一个Servlet,它是Servlet的一种特殊形式(由SUN公司推出),每个jsp 页面都是一个servlet实例。
Servlet是由Java提供用于开发web服务器应用程序的一个组件,运行在服务端,由servlet容器管理,用来生成动态内容。一个servlet实例是实现了特殊接口Servlet的Java 类,所有自定义的servlet均必须实现Servlet接口。
区别:
jsp 是html页面中内嵌的Java代码,侧重页面显示;
Servlet是html代码和Java代码分离,侧重逻辑控制,
mvc设计思想中jsp 位于视图层,servlet位于控制层,jsp主体是html,穿插java代码代码实现动态化算是封装的servlet
页面元素
•
静态内容(html,css,javascript)
•
指令(<%@ page %>)
•
<% JAVA代码 %> //局部代码 service()
•
<%=java表达式%> //输出
•
<%! 定义方法,定义成员变量%>
注释
<!-- html --> 客户端可以看到
<%-- JSP注释 -->
<% JAVA注释 %>
JSP运行原理
jsp代码修改导致jsp重新翻译和编译
客户端第一次请求---->JSP翻译成java文件---->编译成class文件----->运行----->将结果响应到客户端
page指令:设置当前页面属性
属性
import:导入jar包
pageEncoding:当前页面的编码 决定服务器以什么编码读取jsp文件,翻译成对应的java文件
contentType:响应内容的类型(告诉浏览器)
isELgnored:是否忽略el表达式 默认值是false
taglib指令:导入标签库
<%@ taglib prefix="c" uri="地址"%>
内置对象
在JSP中可以直接使用的对象,但是idea里的方法提示不全
1.
application:代表整个应用域对象(服务器关闭)
2.
session:会话对象 (重定向,浏览器关闭)
3.
request:请求对象 (转发)
4.
pageContext:当前上下文对象,域对象(当前页面)
1.
page:当前对象
2.
response:响应对象
1.
config:配置信息
2.
out:输出对象
3.
exception:异常对象
pageContext
域对象:当前页面
获取其他八个内置对象
向其他三个域对象中存取值
include
静态包含 <%@ include file="demo1.jsp" %> 把该网页的所有内容包含进来。
动态包含 <jsp:include page="demo1.jsp"></jsp:include> 运行该网页得到输出,然后把输出包含进来。
传参
# 定义
<jsp:include page="dataCenterFragmentJs.jsp" flush="true">
<jsp:param name="isSub" value="true"/>
</jsp:include>
# 使用
var isSub = ${param.isSub};
跳转
跳转 <jsp:forward page="demo4.jsp"></jsp:forward>
request.getRequestDispatcher("path").forward(response,request)
使用request对象方法setAttribute(“name”,value)传参
重定向 response.sendRedirect("/day02/jsp/demo4.jsp");
域对象
•
APPLICATION context 持续
•
SESSION 一次对话,关闭网页再打开就没了,因为sessionId丢了,关闭网页对话中断。
•
REQUEST 一次请求,重定向之后就没了
•
pageContext 当前页, 不在当前页面就没了
评论区