JSP全称为(Java server page),之所以出现JSP,最主要的目的是抽离出Servlet中输出HTML的部分,由于之前响应客户端的时候,是直接在Servlet中利用response.getWriter().println()方法写的HTML代码,这样做显然很麻烦。并且代码的耦合度非常高,因此产生了JSP。

  JPS中可以含有JAVA代码、HTML(CSS+JS)代码,JSP是一种Servlet,它内置了许多对象。如request、out等。虽然JSP是一种Servlet但是与HttpServlet的工作方式有点不同。HttpServlet是由编译器编译成.class文件,然后才部署到服务器的。然而JSP是先部署源代码,后编译成.class文件的。

  如:index.jsp文件,当第一次被访问的时候会先由Tomcat转换成index_jsp.java文件,然后再编译成index_jsp.class文件,该class文件便是jsp对应的Servlet文件。如果后面再次访问该JSP的时候无需再次编译而是直接使用之前编译好的index.class文件。所以第一次加载JSP的时候会感觉比较慢,但是后面的访问就没有该问题了。

  JSP主要包含以下几个技术点:

    1.javaBean

    2.EL (Expreission Language) 表达式

    3.JSTL (Java Standard Tag Library) 标签库

    4.自定义标签

    5.指令

6.行为

一:JSP代码演示

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<!-- 添加java代码 -->
<%
//创建变量保存要展示的数据
String showInfo = "";
//获取用户本地信息
Locale locale = request.getLocale();
Calendar calendar = Calendar.getInstance(locale);
//获取小时
int hour = calendar.get(Calendar.HOUR_OF_DAY); if(hour>0){
if(hour<=12){
showInfo = "早上好";
}else if(hour>12 && hour<=18){
showInfo = "下午好";
}else if(hour>18){
showInfo = "晚上好";
}
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP测试界面</title>
<style type="text/css">
p{
color:red;
}
</style>
</head>
<body>
<!-- 编写html代码 -->
<p><%=showInfo %></p>
</body>
</html>

*:该例子中涉及的知识点

  ①:Java 代码一般写在<%  %>语句块中;Html代码写在<body></body>标签之间。

  ②:JSP中输出采用两种方式,使用内置对象out.println()、<%= %>进行输出展示。<%= %>(中不能出现";")

  ③:<%@ page import="java.util.*"%> 属于JSP的page指令 import指令是唯一,一个可以重复出现的指令,其余的像 <%@page language="java"%>等指令,language只能在当前jsp文件中出现一次。

二:JSP中小知识点

  1.JSP中代码注释,除了使用//外还可以使用<%-- jsp代码注释 --%>

  2.JSP中的java代码部分和Java语法完全一样。无非是<%%>标签后台Html代码的来回切换、穿插。

    比如 if、for、while、switch、break、return等都一样。

    *:值得注意的是,return语句使用后,后面的html代码也是不生效的。

  3.JSP中声明成员方法和成员属性,需要注意一点妖精声明部分的代码放置在<%! %>中:

  <%!

     private String name;
    public void setName(String name){       this.name = name;
    }
    public String getName(){       return name;
    }
  %>

  4.JSP的生命周期函数(因为JSP是一种Servlet,所以JSP的生命周期函数和Servlet一样)

    _jspInit() 初始化Jsp 、_jspService 服务Jsp、_jspDestroy 销毁Jsp

    *:当然这些方法在使用的时候也要放置在<%! %>之间,自定义方法的时候尽量不要和上面的方法名称一样,一样的时候默认为覆盖了上面的方法。

二:JSP指令

JSP的指令都放置在<%@ %>标签中,常见的指令分为三类:

①:<%@page %>

  

②:<%@taglib %>为JSP的标签库,使用标签库,能够更加方便的展示数据,同时减少<%%>语句块在Html之间的穿插,避免写java代码。 [jstl标签可以近似的看作是html标签] 

<%--
添加标签库,前提项目中导入的有jstl-1.2_1.jar
uri:为标签库的路径
prefix:表明使用该库中指令的时候需要添加什么样的前缀
--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%--
使用jstl标签库中的forEach标签
${index}该语句是使用了EL表达式,前提项目中要导入jstl_el.jar包
var="index"是为当前遍历的items命名,配合${}表达式和<c:out>
标签进行输出显示
--%>
<c:forEach begin="0" end="10" var="index">
<p>
使用jstl表达式创建的p标签<c:out value="${index}"></c:out>
</p>
</c:forEach>

③:<%@include %>  该指令用来引用一些公共的jsp或者html文件。(比如一个web页面的头部和尾部)

//include 指令【先合并,后编译,属于一个文件】
<%@ include file="./xxx.jsp" %>
//include 行为 【先编译,后合并,属于多个文件】
<jsp:include page="./xxx.jsp">

三:JSP的行为 【作用:减少<%%>标签(java代码的出现),使得整个jsp文件代码更加整洁。】

  在第二部分中提到的有一个include行为,它的作用和<%@include file="./xxx.jsp"%>指令的作用一样,不同的就是,include行为是,先编译后合并。除了该行为JSP还有以下几种行为:

  JSP行为的一般书写规则为:<jsp:行为名称 属性名称="属性值">

  1.useBean行为【作用:创建一个javaBean类的实例】,配合<jsp:setProperty > 和<jsp:getProperty >行为 使用:

    <!-- 
该行为代替的就是java代码: JavaBean javaBean = new JavaBean();
id:为要创建的实例对象的名称
class:为要创建对象的类名
scope:指明该对象的作用域(不写默认为page)page指在当前jsp文件中有效,在其他jsp文件中使用<jsp:getProperty>是不能够获得属性的。
        可以选用的值:
request:本次请求中有效【一个request,可以同过forward()方法,贯穿多个jsp,那么这些jsp中都可以使用】
session:本次会话中有效【即对当前用户有效】
application: web应用程序内有效【服务关闭后失效】
-->
<jsp:useBean id="javaBean" class="cn.woo.entity.JavaBean" scope="page"></jsp:useBean>
<!-- 给javabean对象的age属性赋值为23 -->
<jsp:setProperty property="age" name="javaBean" value="23"/>
<!-- 给javabean对象的name属性赋值为woo 类似java代码: javaBean.setName("woo"); -->
<jsp:setProperty property="name" name="javaBean" value="woo"/>
<p>
<!--获取javaBean对象的属性值 类似java代码 javaBean.getAge();-->
年龄:<jsp:getProperty property="age" name="javaBean"/>
</p>
<p>
姓名:<jsp:getProperty property="name" name="javaBean"/>
</p>

  2.forward行为【相当于对代码request.getRequestDispatcher("/xxx.jsp").forward(request, response);的封装(转发)】

    <!-- 
jsp的froward行为,执行该代码将跳转至xxx.jsp文件,并携带参数score = "123";可以在xxx.jsp中采用EL表达式${score}的方式进行获取。
-->
<jsp:forward page="./xxx.jsp">
<!-- 跳转的时候可以携带参数 -->
<jsp:param value="123" name="score"/>
</jsp:forward>

  3.directive行为 【代替了,jsp的指令 如:<%@page%> 、<%include%>、<%@taglib%>等】  

   <jsp:directive.page/>行为相当于<%@page%>指令
<jsp:directive.include/>行为相当于<%include%>指令
<jsp:directive.taglib/>行为相当于<%@taglib%>指令

四:JSP的9大内置对象和4大作用域

   9大内置对象:

   

   *:注意在使用exception内置对像的时候,要使用<%@page %>指令开启,exception的使用。<%@ page errorPage="true" %>

   4大作用域:【在Servlet中通常将javaBean或者其他响应数据存放在下方域中比如,然后再jsp中利用EL表达式进行数据的获取和展示】

    page指在当前jsp文件中有效
    request:本次请求中有效【一个request,可以同过forward()方法,贯穿多个jsp,那么这些jsp中都可以使用】
session:本次会话中有效【即对当前用户有效】
application: web应用程序内有效【服务关闭后失效】 五:JSP的配置 【JSP是一种Servlet所以它的配置和Servlet很类似】
  
   <!-- 配置JSP -->
<servlet>
<servlet-name>second</servlet-name>
<jsp-file>/jsp/second.jsp</jsp-file>
<!--
因为jsp也是servlet所以可以配置jsp的初始化参数
在jsp中使用内置对象config进行初始化参数的获取config.getInitParameter("aaa");
当然jsp中也可以使用配置好的上下文参数(使用pageContext内置对象):pageContext.getServletContext().getInitParameter("上下文参数");
-->
<init-param>
<param-name>aaa</param-name>
<param-value>123</param-value>
</init-param>
</servlet> <!--
配置JSP的映射 【这样一来不仅可以通过浏览器直接访问jsp文件,而且还可以通过映射进行访问】
-->
<servlet-mapping>
<servlet-name>second</servlet-name>
<url-pattern>/jsp/second</url-pattern>
<!-- 配置多映射 -->
<url-pattern>/jsp/second1</url-pattern>
</servlet-mapping>
六:EL表达式

  1.EL表达式  
el表达式出现在html代码中,不能放置在<% %>标签中。el表达式使用${}符号进行操作。
 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用EL表达式</title>
</head>
<body> <!-- 运用JSP的useBean行为创建对象 -->
<jsp:useBean id="obj" class="cn.woo.entity.JavaBean"></jsp:useBean>
<jsp:setProperty name="obj" property="age" value="23"></jsp:setProperty>
<jsp:setProperty name="obj" property="name" value="unknown"></jsp:setProperty>
<!-- 使用EL表达式获取存放在page域中的对象 -->
<!-- 相当于obj.getName() -->
欢迎:<p>${obj.name}</p>
<!-- 相当于obj.getAge() -->
年龄:<P>${obj.age}</P>
</body>
</html>
  *:EL表达式查询原则(范围从小到大)先从request中查找,如果没有去session、application中找。【当然你可以直接指定范围,比如:pageScope.obj.age】

   2.EL表达式操作隐藏对象

  

  3.EL表达式中的运算符

    + - * / %      > == < != >= <=     &&    ||     !    支持三目运算符 ?:   如:${1+1} 等

    ${javaBean.param[0]} 去除param中的第一个元素

    判断javaBean中的属性是否为空,${empty javaBean.param}

 

最新文章

  1. PoEdu - C++阶段班【Po学校】- 第3天
  2. HTML5学习之文档结构和语义(一)
  3. Android项目目录结构分析
  4. c# 遍历子控件,比如Form下的group,或者panel
  5. PHP扩展开发01:第一个扩展【转】
  6. js和jquery中有关透明度操作的问题
  7. GET方式URL乱码问题解决
  8. 发生Windows无法访问远程共享的解决办法
  9. python闭包和装饰器
  10. 对屏幕的理解---分辨率,dpi,ppi,屏幕尺寸,像素 等
  11. xshell 使用root 连接ubuntu server
  12. Kotlin入门(24)如何自定义视图
  13. Django 学习笔记(三) --- HTML 模版加载 css、js、img 静态文件
  14. List排序Collections.sort 重写compare
  15. How to resize slide dimensions without resizing any objects on the slide?
  16. IntelliJ IDEA 运行 Maven 项目
  17. 构建高性能服务(二)java高并发锁的3种实现
  18. 页面中的删除确认(ajax)、输入框中确认信息是否可用(ajax)的jquery代码
  19. C#委托和事件的使用的意义
  20. 服务器安全策略之《通过IP安全策略阻止某个IP访问的设置方法》

热门文章

  1. css+div制作圆角矩形的四种方法
  2. 使用SecureCRT工具部署项目
  3. Jmeter连接MySQL配置(能执行多条sql语句)
  4. Blast 如何使用Blast+(Linux)转载
  5. Leetcode:206. Reverse Linked List
  6. 31.TCP/IP 三次握手与四次挥手
  7. 19. CTF综合靶机渗透(十二)
  8. Mathematics Base - 期望、方差、协方差、相关系数总结
  9. sublime text 3安装及使用
  10. eros --- Windows Android真机调试