4. JSP

4.1 简介

​ JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet

​ JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据

​ 不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术有各自的特点,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示交给jsp来做, 在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。

注:JSP底层就是一个Servlet。(login.jsp 的java文件)

package org.apache.jsp;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.net.URLDecoder;public final class login_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent {private static final javax.servlet.jsp.JspFactory _jspxFactory =javax.servlet.jsp.JspFactory.getDefaultFactory();private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;static {_jspx_dependants = new java.util.HashMap<java.lang.String,java.lang.Long>(1);_jspx_dependants.put("/autologin.jsp", Long.valueOf(1631100238671L));}private javax.el.ExpressionFactory _el_expressionfactory;private org.apache.tomcat.InstanceManager _jsp_instancemanager;public java.util.Map<java.lang.String,java.lang.Long> getDependants() {return _jspx_dependants;}public void _jspInit() {_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());}public void _jspDestroy() {}public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfig config;javax.servlet.jsp.JspWriter out = null;final java.lang.Object page = this;javax.servlet.jsp.JspWriter _jspx_out = null;javax.servlet.jsp.PageContext _jspx_page_context = null;try {response.setContentType("text/html;charset=UTF-8");pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);_jspx_page_context = pageContext;application = pageContext.getServletContext();config = pageContext.getServletConfig();session = pageContext.getSession();out = pageContext.getOut();_jspx_out = out;out.write("\r\n");out.write("<html>\r\n");out.write("<head>\r\n");out.write("    <title>Title</title>\r\n");out.write("    <style type=\"text/css\">\r\n");out.write("        .con{\r\n");out.write("            border: 2px #a52a2a solid;\r\n");out.write("            width:500px;\r\n");out.write("            height:200px;\r\n");out.write("            position:fixed;\r\n");out.write("            left:50%;\r\n");out.write("            top:50%;\r\n");out.write("            margin:-100px 0 0 -250px\r\n");out.write("        }\r\n");out.write("    </style>\r\n");out.write("</head>\r\n");out.write("<body>\r\n");out.write("    ");out.write("\r\n");out.write("    ");out.write("\r\n");out.write("\r\n");//获取CookieCookie[] cookies = request.getCookies();if (cookies!=null){int num = 0;for (Cookie cookie :cookies){String key = URLDecoder.decode(cookie.getName(),"UTF-8");String value = URLDecoder.decode(cookie.getValue(),"UTF-8");if(key.equals("username")){num++;request.getSession().setAttribute(key,value);}if(key.equals("role")){num++;request.getSession().setAttribute(key,value);}if(key.equals("name")){num++;request.getSession().setAttribute(key,value);}if(num == 3){response.sendRedirect("page.jsp");}}}out.write('\r');out.write('\n');out.write("\r\n");out.write("\r\n");out.write("    ");out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${msg!=null?msg:\"\"}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));out.write("\r\n");out.write("<h1 style=\"text-align: center;\">登录界面</h1>\r\n");out.write("<div class=\"con\">\r\n");out.write("    <form action=\"LoginServlet\" method=\"post\">\r\n");out.write("        <table >\r\n");out.write("            <tr>\r\n");out.write("                <th width=\"100px\">账号:</th>\r\n");out.write("                <td width=\"400px\">\r\n");out.write("                    <input type=\"text\" name=\"username\" id=\"username\"/>\r\n");out.write("                </td>\r\n");out.write("            </tr>\r\n");out.write("            <tr>\r\n");out.write("                <th>密码:</th>\r\n");out.write("                <td>\r\n");out.write("                    <input type=\"password\" name=\"password\" id=\"password\"/>\r\n");out.write("                </td>\r\n");out.write("            </tr>\r\n");out.write("            <tr>\r\n");out.write("                <th>验证码:</th>\r\n");out.write("                <td>\r\n");out.write("                    <input type=\"text\" name=\"code\" id=\"code\"/><img src=\"CodeServlet\" width=\"100px\" height=\"40px\" οnclick=\"loadCode()\">\r\n");out.write("                </td>\r\n");out.write("            </tr>\r\n");out.write("            <tr>\r\n");out.write("                <th>角色:</th>\r\n");out.write("                <td>\r\n");out.write("                    <select name=\"role\">\r\n");out.write("                        <option value=\"student\">学生</option>\r\n");out.write("                        <option value=\"teacher\">教师</option>\r\n");out.write("                    </select>\r\n");out.write("                </td>\r\n");out.write("            </tr>\r\n");out.write("            <tr>\r\n");out.write("                <th colspan=\"2\">\r\n");out.write("                    <input  type=\"checkbox\" name=\"checkbox\" >记住我<br/>\r\n");out.write("                </th>\r\n");out.write("            </tr>\r\n");out.write("            <tr>\r\n");out.write("                <th colspan=\"2\">\r\n");out.write("                    <input  type=\"submit\" style=\"width:90px;height:30px\" value=\"登录\"><br/>\r\n");out.write("                </th>\r\n");out.write("            </tr>\r\n");out.write("        </table>\r\n");out.write("    </form>\r\n");out.write("    <a href=\"register.jsp\" >没有账号?点击注册</a>\r\n");out.write("    <a href=\"welcome.html\" >取消登录</a>\r\n");out.write("    <script type=\"text/javascript\">\r\n");out.write("        var img = document.getElementsByTagName(\"img\")[0];\r\n");out.write("        function loadCode() {\r\n");out.write("            img.src = \"CodeServlet?\" + new Date();\r\n");out.write("        }\r\n");out.write("        loadCode();\r\n");out.write("    </script>\r\n");out.write("</div>\r\n");out.write("</body>\r\n");out.write("</html>\r\n");} catch (java.lang.Throwable t) {if (!(t instanceof javax.servlet.jsp.SkipPageException)){out = _jspx_out;if (out != null && out.getBufferSize() != 0)try {if (response.isCommitted()) {out.flush();} else {out.clearBuffer();}} catch (java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);else throw new ServletException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}}
}

4.2 JSP语法

4.2.1 模板元素

JSP页面中的HTML内容称之为JSP模版元素。

JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观

4.2.2 脚本表达式

JSP脚本表达式(expression)用于将程序数据输出到客户端

语法:<%= 变量或表达式 %>

举例:当前时间:<%= new java.util.Date() %> <%=msg!=null?msg:"" %>

注:JSP脚本表达式中的变量或表达式后面不能有分号

<h1>欢迎<%=name%><%=(role.equals("student")?"学生":role.equals("teacher")?"老师":"")%>进入详情页面</h1>

4.2.3 脚本片段

JSP脚本片断,用于在JSP页面中编写多行Java代码。

语法:

<%

​ 多行java代码

%>

注意:

JSP脚本片断中只能出现java代码,不能出现其它模板元素

JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。

<%String username = (String) request.getSession().getAttribute("username");String role = (String) request.getSession().getAttribute("role");String name = (String) request.getSession().getAttribute("name");
%>

使用循环(表达式+片段):

<%for (StudentDto stuDto:stuDtoList) {%><tr><th><%=stuDto.getStu().getUsername()%></th><th><%=stuDto.getStu().getName()%></th><th><%=stuDto.getSex()%></th><th><%=stuDto.getStu().getAge()%></th><th><%=stuDto.getHobby()%></th></tr>
<%}%>

4.2.4 声明

JSP页面中编写的所有代码,默认会翻译到servlet的service方法中,而Jsp声明中的java代码被翻译到_jspService方法的外面。

语法

<%!

​ java代码

%>

定义全局变量,整个JSP的表达式都能够使用。

4.2.5 注释

注释格式: <%-- 注释信息 --%>

4.2.6 三大指令

JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。

4.2.6.1 指令的基本语法

<%@ 指令 属性名=“值” %>

如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。

<%@ page contentType=“text/html;charset=utf-8” import=“java.util.Date”%>

也可以这样写:

<%@ page contentType=“text/html;charset=utf-8”%>

<%@ page import=“java.util.Date”%>

4.2.6.2 在JSP 2.0规范中共定义了三个指令:

1. page指令

​ page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。

完整的page指令语法:

<%@ page import="{package.class | package.*}, ..." errorPage="relative_url" isErrorPage="true | false"contentType= "text/html ; charset=UTF-8"%>
<%-- impor导包   errorPage发生错误跳转的页面  isErrorPage=true表示当前页面是处理错误的页面 contentType:编码格式--%>
2. include指令

​ include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入

语法:<%@ include file=“被包含页面的绝对URL或相对URL"%>

其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。

注:

1.被引入的文件必须遵循JSP语法。

2.被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp

页面的方式处理它里面的内容。

<%@include file="pagechange.jsp"%>

pagechange.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<a href="${page.url}1">首页</a>
<java:if test="${page.currentPage>1}"><a href="${page.url}${page.currentPage-1}">上一页</a>
</java:if>
<java:if test="${page.currentPage<page.allPage}"><a href="${page.url}${page.currentPage+1}">下一页</a>
</java:if>
<a href="${page.url}${page.allPage}">尾页</a>
3. taglib指令

taglib指令常用于在JSP页面中导入标签库

(idea需要手动导入jar包:jsp-api.jar,jstl-1.2.jar)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="java"%>

导入标签库(JSTL)之后,可以使用<java 标签来使用java的常用分支语句、循环语句等…

<java:forEach items="${page.list}" var="stulist"><tr><th>${stulist.stu.username}</th><th>${stulist.stu.name}</th><th>${stulist.sex}</th><th>${stulist.stu.age}</th><th>${stulist.hobby}</th></tr>
</java:forEach>

注:在需要使用一些常用方法时,需要额外导入函数库。

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fun"%>
爱好:
<input name="hobby" value="football" type="checkbox" <java:if test="${fun:contains(student.hobby, 'football')}">checked='checked'</java:if>/>足球
<input name="hobby" value="basketball" type="checkbox" <java:if test="${fun:contains(student.hobby, 'basketball')}">checked='checked'</java:if>/>篮球
<input name="hobby" value="shop" type="checkbox" <java:if test="${fun:contains(student.hobby, 'shop')}">checked='checked'</java:if>/>购物
<br/>

4.2.7 九大内置对象

​ 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。

​ 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。

​ JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

1.request – HttpServletRequest

2.response – HttpServletResponse

3.config – ServletConfig

4.application – ServletContext

5.exception(只有在page指令中具有属性isErrorPage="true"时才有效)-- Exception

6.session – HttpSession

7.page – 当前类

8.out – JspWriter

9.pageContext – PageContext

4.2.7.1 request对象

​ 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

方法详解:

1 object getAttribute(String name) 返回指定属性的属性值

2 Enumeration getAttributeNames() 返回所有可用属性名的枚举

3 String getCharacterEncoding() 返回字符编码方式

4 int getContentLength() 返回请求体的长度(以字节数)

5 String getContentType() 得到请求体的MIME类型

6 ServletInputStream getInputStream() 得到请求体中一行的二进制流

7 String getParameter(String name) 返回name指定参数的参数值

8 Enumeration getParameterNames() 返回可用参数名的枚举

9 String[] getParameterValues(String name) 返回包含参数name的所有值的数组

10 String getProtocol() 返回请求用的协议类型及版本号

11 String getScheme() 返回请求用的计划名,如:http.https及ftp等

12 String getServerName() 返回接受请求的服务器主机名

13 int getServerPort() 返回服务器接受此请求所用的端口号

14 BufferedReader getReader() 返回解码过了的请求体

15 String getRemoteAddr() 返回发送此请求的客户端IP地址

16 String getRemoteHost() 返回发送此请求的客户端主机名

17 void setAttribute(String key,Object obj) 设置属性的属性值

18 String getRealPath(String path) 返回一虚拟路径的真实路径

4.2.7.2 response对象

​ response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。

方法详解:

1 String getCharacterEncoding() 返回响应用的是何种字符编码

2 ServletOutputStream getOutputStream() 返回响应的一个二进制输出流

3 PrintWriter getWriter() 返回可以向客户端输出字符的一个对象

4 void setContentLength(int len) 设置响应头长度

5 void setContentType(String type) 设置响应的MIME类型

6 sendRedirect(java.lang.String location) 重新定向客户端的请求

4.2.7.3 config对象

​ config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

方法详解:

1 ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象

2 String getInitParameter(String name) 返回初始化参数的值

3 Enumeration getInitParameterNames() 返回初始化所需所有参数的枚举

4.2.7.4 application对象

​ application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。

方法详解:

1 Object getAttribute(String name) 返回给定名的属性值

2 Enumeration getAttributeNames() 返回所有可用属性名的枚举

3 void setAttribute(String name,Object obj) 设定属性的属性值

4 void removeAttribute(String name) 删除一属性及其属性值

5 String getServerInfo() 返回JSP(SERVLET)引擎名及版本号

6 String getRealPath(String path) 返回一虚拟路径的真实路径

7 ServletContext getContext(String uripath) 返回指定WebApplication的application对象

8 int getMajorVersion() 返回服务器支持的Servlet API的最大版本号

9 int getMinorVersion() 返回服务器支持的Servlet API的最大版本号

10 String getMimeType(String file) 返回指定文件的MIME类型

11 URL getResource(String path) 返回指定资源(文件及目录)的URL路径

12 InputStream getResourceAsStream(String path) 返回指定资源的输入流

13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象

14 Servlet getServlet(String name) 返回指定名的Servlet

15 Enumeration getServlets() 返回所有Servlet的枚举

16 Enumeration getServletNames() 返回所有Servlet名的枚举

17 void log(String msg) 把指定消息写入Servlet的日志文件

18 void log(Exception exception,String msg) 把指定异常的栈轨迹及错误消息写入Servlet的日志文件

19 void log(String msg,Throwable throwable) 把栈轨迹及给出的异常的说明信息写入的日志文件

4.2.7.5 exception对象

​ exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。

方法详解:

1 String getMessage() 返回描述异常的消息

2 String toString() 返回关于异常的简短描述消息

3 void printStackTrace() 显示异常及其栈轨迹

4 Throwable FillInStackTrace() 重写异常的执行栈轨迹

4.2.7.6 session对象

​ session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例。

方法详解:

1 long getCreationTime() 返回SESSION创建时间

2 public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号

3 long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间

4 int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms)

5 String[] getValueNames() 返回一个包含此SESSION中所有可用属性的数组

6 void invalidate() 取消SESSION,使SESSION不可用

7 boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入

8 void removeValue(String name) 删除SESSION中指定的属性

9 void setMaxInactiveInterval() 设置两次请求间隔多长时间此SESSION被取消(ms)

4.2.7.7 page对象

​ page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例

方法详解:

1 class getClass 返回此Object的类

2 int hashCode() 返回此Object的hash码

3 boolean equals(Object obj) 判断此Object是否与指定的Object对象相等

4 void copy(Object obj) 把此Object拷贝到指定的Object对象中

5 Object clone() 克隆此Object对象

6 String toString() 把此Object对象转换成String类的对象

7 void notify() 唤醒一个等待的线程

8 void notifyAll() 唤醒所有等待的线程

9 void wait(int timeout) 使一个线程处于等待直到timeout结束或被唤醒

10 void wait() 使一个线程处于等待直到被唤醒

11 void enterMonitor() 对Object加锁

12 void exitMonitor() 对开锁

4.2.7.8 out 对象

​ out对象是JspWriter类的实例,是向客户端输出内容常用的对象

方法详解:

1 void clear() 清除缓冲区的内容

2 void clearBuffer() 清除缓冲区的当前内容

3 void flush() 清空流

4 int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0

5 int getRemaining() 返回缓冲区还剩余多少可用

6 boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常

7 void close() 关闭输出流

4.2.7.9 pageContext 对象

​ pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。

方法详解:

1 JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)

2 HttpSession getSession() 返回当前页中的HttpSession对象(session)

3 Object getPage() 返回当前页的Object对象(page)

4 ServletRequest getRequest() 返回当前页的ServletRequest对象(request)

5 ServletResponse getResponse() 返回当前页的ServletResponse对象(response)

6 Exception getException() 返回当前页的Exception对象(exception)

7 ServletConfig getServletConfig() 返回当前页的ServletConfig对象(config)

8 ServletContext getServletContext() 返回当前页的ServletContext对象(application)

9 void setAttribute(String name,Object attribute) 设置属性及属性值

10 void setAttribute(String name,Object obj,int scope) 在指定范围内设置属性及属性值

11 public Object getAttribute(String name) 取属性的值

12 Object getAttribute(String name,int scope) 在指定范围内取属性的值

13 public Object findAttribute(String name) 寻找一属性,返回起属性值或NULL

14 void removeAttribute(String name) 删除某属性

15 void removeAttribute(String name,int scope) 在指定范围删除某属性

16 int getAttributeScope(String name) 返回某属性的作用范围

17 Enumeration getAttributeNamesInScope(int scope) 返回指定范围内可用的属性名枚举

18 void release() 释放pageContext所占用的资源

19 void forward(String relativeUrlPath) 使当前页面重导到另一页面

20 void include(String relativeUrlPath) 在当前位置包含另一文件

4.2.8 JSP标签

​ JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

<jsp: include>标签 :动态导入,标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中 。

<jsp: forward>标签 :标签用于把请求转发给另外一个资源。

<jsp: param>标签: 当使用<jsp: include>和<jsp: forward>标签引入或将请求转发给其它资源时,可以使用<jsp: param>标签向这个资源传递参数。

4.3 EL表达式

EL 全名为Expression Language

EL它不是一种开发语言,而是jsp中获取数据的一种规范 ,他的语法很简单,最大的特点就是使用上很方便。

结构:以 “${” 开头,以 “}” 结尾

如:${sessionScope.username}

4.3.1 EL表达式获取数据

EL表达式的使用可以完全取代掉脚本表达式,且会自动获取四大域中的数据,无需要先获取再使用。(默认从 PageScope开始寻找,找到就停止寻找,最终未找到就返回null,但EL表达式为null时,不会在前端打印“null”,而是空白。)

四大域:(范围从小到大。)

属性范围(jstl名称) EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope

我们在使用EL表达式时,也可以自己指定该数据是从什么域中获取,示例:

${pageScope.username} 、 ${requestScope.username} 、 ${sessionScope.username} 、

${applicationScope.username}

指定域之后,就不会在寻找其他域的数据,效率上有所提升。

注:EL表达式底层采用反射机制寻找数据,直接获取对象的成员属性,不需要经过get方法。

即:

<tr><th>${stulist.stu.username}</th><th>${stulist.stu.name}</th><th>${stulist.sex}</th><th>${stulist.stu.age}</th><th>${stulist.hobby}</th>
</tr>

4.3.2 逻辑表达式

关系运算符:

关系运算符 说明 使用示例 运算结果
== 或 eq 等于 5==5或{5==5}或5==5或{5eq5} true
!= 或 ne 不等于 5!=5或{5!=5}或5!=5或{5ne5} false
< 或 lt 小于 3<5或{3<5}或3<5或{3lt5} true
> 或 gt 大于 ${3>5}或{3gt5} false
<= 或 le 小于等于 3<=5或{3<=5}或3<=5或{3le5} true
>= 或 ge 大于等于 5}或${3ge5} false

逻辑运算符

逻辑运算符 使用示例
&&或and 交集KaTeX parse error: Expected '}', got '&' at position 4: {A &̲& B}或{A and B}
||或or 并集A∥∥B或{A \|\| B}或A∥∥B或{A or B}
!或not 非!A或{! A }或!A或{not A}

empty 运算符

${empty 键名} 作用:判断键名对象的值是否存有数据。

三目运算符

结构: A?B:C示例:{ A ? B : C} 示例:A?B:C示例:{msg!=null?msg:""}

EL获取请求头数据和Cookie数据:

请求头数据:

​ ${header}–>返回所有的请求头数据

​ ${header[“键名”]}—>返回指定的键名的请求头数据

​ ${hedaerValues[“键名”]}—>返回指定的键名(同键不同值)的值的数组。

获取Cookie数据:

​ ${cookie}—>返回存储了所有的cookie对象的map集合

​ ${cookie.键名}---->返回指定的cookie对象

​ ${cookie.键名.name}—>返回指定的cookie对象存储的数据的键名。

​ ${cookie.键名.value}—>返回指定的cookie对象存储的数据的值。

4.4 JSTL标准标签库

4.4.1 简介

JSTL(JavaServerPages Standard Tag Library)JSP标准标签库

4.4.2 作用

使用JSTL实现JSP页面中逻辑处理。如判断、循环等。

4.4.3 使用JSTL的步骤

1)在JSP页面添加taglib指令

<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“标签名”%>

2)使用JSTL标签

<标签名 :if test="${empty username}"></标签名 :if>用户名不存在

标签名可以自己定义。(示例中的标签名被定义成java)

4.4.4 常用标签

通用标签: set(设置变量值)、 out(获取变量值)、 remove (删除变量值)

<java:set var="num" value= "6"></java:set>
<java:out value="${num}"></java:out>
<java:remove var="num"></java:remove>
<java:out value="${num}" default="不存在该变量"></java:out>

条件标签:if

<input name="sex" value="man" type="radio" <java:if test="${student.sex eq 'man'}">checked='checked'</java:if>/>男<input name="sex" value="woman" type="radio" <java:if test="${student.sex eq 'woman'}">checked='checked'</java:if>/>女

迭带标签:forEach:

 <java:forEach items="${page.list}" var="stulist"><tr><th>${stulist.stu.username}</th><th>${stulist.stu.name}</th><th>${stulist.sex}</th><th>${stulist.stu.age}</th><th>${stulist.hobby}</th>
</java:forEach>

网页前端基础三:JSP技术相关推荐

  1. 第二章网页前端基础与HTTP协议

    第二章 网页前端基础与HTTP协议 爬虫需要遵循网络传输协议才能与服务器进行通信,当与服务器建立通信后,爬虫才能获取网页内容,从而获取想要爬取的内容.获取到的网页内容通常为HTML(HyperText ...

  2. 前端基础(三)_JavaScript数据类型(基本数据类型、复杂数据类型)

    一.数据类型分类 1.1.数据类型分类 JavaScript的数据类型为弱类型,即最开始的时候并不知道变量是什么类型,必须通过后面的值才能知道. JavaScript的数据类型分为简单数据类型(也称为 ...

  3. 前端基础三之JavaScript基础

    文章目录 题外话 前言 1. JavaScript基础 1.1 JavaScript介绍 1.2 基础语法 1.2.1 Hello World 1.2.2 注释 1.2.3 变量 1.2.4 数据类型 ...

  4. 前端基础三:ECMAScript

  5. 如何做网站网页?做网站需要什么技术?这三个是基础

    其实做网站需要的技术也是比较多的,比如说html技术,css技术这些都是网站的调试方面儿的.当然,如果对于成型的网站源码的话,需要用户懂得三个基础技术就可以完成己做网站了.今天针对这三个技术,给大家详 ...

  6. web前端大三实训网页设计:餐饮网站设计——烧烤美食山庄(7个页面) HTML+CSS+JavaScript

    web前端大三实训网页设计:餐饮网站设计--烧烤美食山庄(7个页面) HTML+CSS+JavaScript 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从 ...

  7. 第三次网页前端培训(CSS)

    1. 视频链接 [优极限] HTML+CSS+JavaScript+jQuery前端必学教程,小白教学,前端基础全套完成版_哔哩哔哩_bilibili2 2. 教程链接 菜鸟教程 - 学的不仅是技术, ...

  8. jsp基础、el技术、jstl标签、javaEE的开发模式

    一.jsp技术基础 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ...

  9. Java 基础入门随笔(1) JavaSE版——java语言三种技术架构

    1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...

  10. ASP、JSP、PHP 三种技术比较

    目前,最常用的三种动态网页语言有ASP(Active Server Pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor). 简 介 ASP ...

最新文章

  1. 购物车的实现(jsp的session+Java的Map的结合)
  2. 修改Ubuntu和XP双系统时的默认启动系统
  3. 【RedHat、CentOS Cacti安装配置】
  4. 为什么想要去探究Mybatis源码?(1)
  5. CentOS7中后台运行Node-RED(关闭窗口也能访问服务)
  6. 51nod1832(二叉树/高精度模板+dfs)
  7. python求超级素数代码_C语言求超级素数
  8. IOHelper(自制常用的输入输出的帮助类)
  9. 深入解析:MySQL对分布式事务 XA Transactions 的支持
  10. 【华为云技术分享】一统江湖大前端DOClever—你的Postman有点Low
  11. python os write_Python os.write() 方法
  12. SharePoint2010传入电子邮件
  13. sql盲注 解决_SQL 盲注漏洞
  14. 线性代数(9):线性正交
  15. H5文本复制到剪切板
  16. python3获取天气预报
  17. JAVA版12306抢票工具
  18. 全程回顾 Blazor Day in China 精彩分享
  19. 电脑卡修复计算机有用吗,电脑卡重装系统有用吗|电脑太卡可以重装系统解决吗...
  20. word两端对齐字的间距太大,怎么办?

热门文章

  1. Pytorch:目标检测网络-非极大值抑制(NMS)
  2. 电机振动噪声(NVH)——整数槽分数槽谐波分析补充
  3. 步进电机原理及参数详解
  4. 弘辽科技:你吃的粽子,撑起百亿市场
  5. 关于学习单片机keil uvision5的基本使用方法
  6. Unity3D 插件大全
  7. RF射频技术-si4438C芯片介绍
  8. 2018年最新_5小时学会微信小程序视频教程网盘地址
  9. 小程序插件开发使用教程
  10. python更改ip地址_用Python更改IP地址(转)