JSP的使用
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}
JSP的使用的更多相关文章
- myeclipse学习总结一(在MyEclipse中设置生成jsp页面时默认编码为utf-8编码)
1.每次我们在MyEclispe中创建Jsp页面,生成的Jsp页面的默认编码是"ISO-8859-1".在这种情况下,当我们在页面中编写的内容存在中文的时候,就无法进行保存.如下图 ...
- jsp前端实现分页代码
前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...
- jsp中出现onclick函数提示Cannot return from outside a function or method
在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...
- jsp页面无法识别el表达式的解决方案
今天在写一个springmvc的小demo时,碰到一个问题,在jsp页面中书写为${user.username}的表达式语言,在浏览器页面中仍然显示为${user.username},说明jsp根本不 ...
- 浅谈JSP中include指令与include动作标识的区别
JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...
- 浅谈JSP注释
HTML注释 JSP文件是由HTML尿急和嵌入的Java程序片段组成的,所以在HTML中的注释同样可以在JSP文件中使用.注释格式:<!--注释内容--> <!-- 欢迎提示信息! ...
- JSP 标准标签库(JSTL)
JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...
- Nginx服务器之Nginx与tomcat结合访问jsp
本文使用linux centos系统 本文概述: JSP是一种动态网页技术标准.使用的方式是在HTML文件中插入程序段和JSP标记,而形成JSP文件.使用JSP开发WEB应用可以跨平台开发.但jsp需 ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- JSP页面跳转的几种实现方法
使用href超链接标记 客户端跳转 使用JavaScript 客户端跳转 提交表单 客户端跳转 使用response ...
随机推荐
- EchoServer和EchoClient模型的改进1之多线程
在之前的EchoServer模型个EchoClient模型中,客户端和服务端只是单纯的一一对应的关系,如果存在多个客户端和一个服务端,这就需要具体处理了.在这里我们明显想到的第一种方案是使用多线程处理 ...
- [hdu3549]Flow Problem(最大流模板题)
解题关键:使用的挑战程序设计竞赛上的模板,第一道网络流题目,效率比较低,且用不习惯的vector来建图. 看到网上其他人说此题有重边,需要注意下,此问题只在邻接矩阵建图时会出问题,邻接表不会存在的,也 ...
- [51nod1113]矩阵快速幂
解题关键:模板题,方便以后熟悉 #include<bits/stdc++.h> using namespace std; typedef long long ll; struct mat{ ...
- 使用showConfirmDialog显示确认框
------------------siwuxie095 工程名:TestJOptionPane 包名:com.siwuxie095.s ...
- MySql数据查询的逻辑蕴含条件问题
SQL语言中没有蕴含逻辑运算.但是,可以利用谓词演算将一个逻辑蕴含的谓词等价转换为:p->q ≡┐p∨q. 我们通过一个具体的题目来分析:(具体的表和数据详见文章:Mysql数据库中的EXIST ...
- std::min error C2059: 语法错误:“::” 的解决方法
std::min error C2059: 语法错误:"::" 的解决方法 下面这段代码: size_t n = std::min(count_, num_elements); 编 ...
- EPEL for CentOS or Redhat
注:地址可能会变 RHEL/CentOS 7 64 Bit # wget http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release ...
- 2.HTTP头注入
重新认识被人遗忘的HTTP头注入 前言 注入类漏洞经久不衰,多年保持在owasp Top 10的首位.今天就聊聊那些被人遗忘的http头注入.用简单的实际代码进行演示,让每个人更深刻的去认识该漏洞. ...
- 实验楼Linux基础入门第一周
&&使用oschina的git服务器 1.创建了项目 https://git.oschina.net/abc99/wyq20169314 2.配置项目 (1)为项目添加公钥 项目管理- ...
- enter键触发事件的清除
使用iframe弹窗时 父级页面 初始化的时候 给enter键绑定了事件 在子页面中 按下enter键会触发 而报错,此时在本页面的初始化的时候 将enter键绑定的方法取消 即可: $(docume ...