侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

JSP

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 159 阅读 / 1,396 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
/ 后端 / Web / JSP
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 当前页, 不在当前页面就没了

0

评论区