浅析jsp
什么是jsp?jsp的全称是 java Server Page ,也就是俗称的动态网页,什么是静态网页和动态网页呢,在我理解看来,HTML等网页就属于静态网页,jsp等网页属于动态网页,为什么这么说呢,因为客户端请求的资源,服务器原封不动的返回,这就是静态资源,静态网页也属于静态资源;当客户端请求的资源需要经过服务器动态的生成,(比如通过编译执行服务端的java代码,拿到数据库或其它地方的某些数据,再对这些数据进行排版返回给客户端),这个就属于动态资源。
说了这么多,jsp究竟是什么东西呢?其实就是HTML代码中嵌入java代码,其实jsp最终还是被编译成Servlet,当我们第一次访问jsp的时候,jsp引擎会将jsp翻译成一个servlet,当再次访问jsp的时候,如果该jsp文件没有变化,直接使用上次已经编译好了的servlet,如果该jsp文件改变了,会重新翻译该jsp文件。
jsp的基础语法
1,注释
JSP 的三种注释方式:
1) // 注释,单行注释 /* 多行注释*/
2)<!-- HTML 风格的注释 -->
3)<%-- JSP 注释 --%>
在 JSP 中支持两种注释的语法操作,一种是显示注释,这种注释是允许客户端看见的; 另一种是隐式注释,此种注释是客户端无法看见的
① 显示注释语法:从 HTML 风格继承而来
② 隐式注释语法:从 JAVA 风格继承;JSP 自己的注释
2.jsp是语法方式
JSP 中最重要的部分就是 Scriptlet( 脚本小程序), 所有嵌入在 HTML 代码中的 Java 程序 都必须使用 Scriptlet 标记出来,在 JSP 中一共有三种Scriptlet 代码:
第一种:<% %>: java 脚本段,可以定义局部变量、编写语句
第二种:<%! %>:声明,可以定义全局(成员)变量、方法、类
第三种:<%= %>:表达式,数据一个变量或具体内容
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head> <body>
<h1>欢迎来到么么哒</h1>
<%
//定义变量 java注释
int a=1;
out.print(a);
/*多行注释*/
%> <%-- <% int b; %> jsp注释 --%> <!-- <% int c; %> Html注释-->
</body>
</html>
客户端只能看到HTML的注释
<!DOCTYPE html PUBLIC >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head> <body>
<h1>欢迎来到么么哒</h1>
1 <!-- Html注释-->
</body>
</html>
jsp的三种使用方式
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% //定义全局变量
int a=1;
out.print(a);
%> <%! int b=10; %>
<% //输入内容
out.print(b);
request.setAttribute("uname", "zhangsan");
request.setAttribute("uname2","lisi" ); String uname=(String)request.getAttribute("uname");
out.print(uname); %>
<%= 100 %>
<%=b %>
<%=a+b %>
<%=uname %>
<%=request.getAttribute("uname2") %> </body>
</html>
jsp的指令标签
JSP 的指令标签用来控制整个 jsp 的行为,就当前 JSP 页面的某些方面对JSP 转换器作出指示。
1) page 指令
掌握使用 page 指令常用的属性 contentType 和 pageEncoding,分别用来指定 MIME 类型 和编码格式。import 属性,用来引入其他包,和 java 中 import语句作用相同。
MIME 类型
<%@ page contentType=”text/html;charset=UTF-8”%>
文件字符编码
contentType 主要的功能是用来设置 MIME(页面响应类型),而charset=”UTF-8” 指定了编码,利用 pageEncoding=”UTF-8”也能指定编码,前者更常用。
<%@ page contentType=”text/html;charset=UTF-8”%>
在 JSP 中,如果 charset 存在,那么 JSP 的编码由 charset 决定,而如果
不存在才会由 pageEncoding 来决定,如果都不存在,则使用 ISO-8859-1 编码。
导包
page 指令中存在 import 属性,所以导包就可以正确使用了,在整个 page指令的属性中, 只有 import 语句可以多次出现,其他属性都只能设置一次。能导包意味着可以直接在 jsp 中 链接数据库。
include 静态包含
<%@ include file=”要包含的文件路径”%>相对路径
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
List<String> list=new ArrayList<>();
int a=1;
%> <%@include file="jsp05.jsp" %> </body>
</ht
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>我是要被包含的页面</h1>
<%
int ab=10;
%>
<%=request.getParameter("uname") %>
</body>
</html>
静态包含就是将内容进行了直接的替换,就好比程序中定义的变量一样 是在 servlet 引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到一起, 全部放到_jspService 方法中),所以只生成了一个 servlet,所以两个页面不能有同名的变量。 运行效率高一点点。耦合性较高,不够灵活。
jsp动态标签
动作标签,它们被编译成执行某个操作的 Java 代码,例如访问某个 Java 对象,或者调用某个方法。JSP 容器有自己支持的标准动作。除标准动作之外,还可以创建指定的标签, 用来执行某些操作。这些 jsp 的动作标签,与 html 提供的标签有本质的区别:* 动作标签是由 tomcat(服务器)来解释执行!与 java 代码一样,都是在服务器端执行* html 由浏览器来执行。
格式如下:
include 动态包含
include 动作用于动态地包含另一个资源,它可以包含另一个 JSP 页面、一个 Servlet 或 者一个静态的 HTML 页面。使用包含操作,可以将一些重复的代码包含进来继续使用,从正常的页面组成来看,有时可能分为几个区域。而其中的一些区域可能是一直不需要改变的,改变的就其中的一个具体内容区域。现在有两种方法可以实现上述功能。
方法一:在每个 JSP 页面(HTML)都包含工具栏、头部信息、尾部信息、具体内容
方法二:将工具栏、头部信息、尾部信息都分成各个独立的文件,以后使用的时候直接 导入进来
很明显,第二种方法比第一种更好,第一种会存在很多重复的代码,并且修改很不方便,在 JSP 中如果要想实现包含的操作,有两种做法: 静态包含、 动态包含,静态包含使用 include 指令即可,动态包含则需要使用 include 动作标签。动态包含在代码的编译阶段,包含和被包含部分是两个独立的部分,只有当运行时,才会动态包含进来,好比方法的调用。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- <jsp:include page="jsp05.jsp"></jsp:include> --%> <jsp:include page="jsp05.jsp" >
<jsp:param value="zhangsan" name="uname"/>
</jsp:include>
</body>
</html>
使用动态包含还可以通过在页面之间传参。接收参数通过request.getParameter();
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>我是要被包含的页面</h1>
<%
int ab=10;
%>
<%=request.getParameter("uname") %>
</body>
</html>
注意:动态包含,不使用参数时,中间不要加任何内容,包括空格,否则报错!
jsp的九大内置对象
1.request 对象
request 对象是 javax.servlet.httpServletRequest 类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过 HTTP 协议传送到服务器的数据。(包括头信息. 系统信息. 请求方式以及请求参数等)。request 对象的作用域为一次请求。
2.response 对象
response 代表的是对客户端的响应,主要是将 JSP 容器处理过的对象传回到客户端。response 对象也具有作用域,它只在 JSP 页面内有效。
3.session 对象
session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个 session 对象,用于保存该用户的信息,跟踪用户的操作状态。session 对象内部使用 Map 类来保存数据,因此保存数据的格式为“Key/value”。 session 对象的 value 可以是复杂的对象类型,而不仅仅局限于字符串类型。
4.application 对象
application 对象可将信息保存在服务器中,直到服务器关闭,否则application 对象中保存的信息会在整个应用中都有效。
与 session 对象相比,application 对象生命周期更长,类似于系统的“全局变量”。
5.out 对象
out 对象用于在 Web 浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
6.pageContext 对象
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的 out. request. reponse. session. application 等对象。pageContext 对象的创建和初始化都是由容器来完成的,在 JSP 页面中可以直接使用 pageContext 对象。
7.config 对象
config 对象的主要作用是取得服务器的配置信息。通过 pageConext 对象的 getServletConfig() 方法可以获取一个 config 对象。当一个 Servlet 初始化时,容器把某些信息通过 config 对象传递给这个Servlet。开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
8.page 对象
page 对象代表 JSP 本身,只有在 JSP 页面内才是合法的。 page 隐含对象本质上包含当前 Servlet 接口引用的变量,类似于 Java 编程中的 this 指针。
9.exception 对象
exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true"的页面中才可以被使用,在一般的 JSP 页面中使用该对象将无法编译 JSP 文件。excepation 对象和 Java 的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。如果在 JSP 页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在 page 指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="false" errorPage="errorpage.jsp"%>
<!DOCTYPE html PUBLIC >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("uname", "zhangsan");
response.setHeader("name","list");
session.setAttribute("uname", "zhangxiang");
application.setAttribute("userappli","admin");
//request.getServletContext().setAttribute("haha", "hehe");
ServletContext sc1=request.getServletContext();
ServletContext sc2 = request.getSession().getServletContext();
pageContext.setAttribute("uname3", "zhoaliu");
pageContext.setAttribute("uname3","zhoaliu2",PageContext.SESSION_SCOPE);
ServletContext sc=config.getServletContext(); //out 输出
out.write("<h1>helloworld</h1>");
out.write(page.getClass().toString());
int a=2/0;
//exception.getMessage(); %> <%=request.getAttribute("uname") %> <%=pageContext.getAttribute("uname3") %> <%=request.getServletContext().getAttribute("userappli") %> <%=pageContext.getAttribute("uname3",pageContext.SESSION_SCOPE) %>
<%=sc %>
<%=sc1 %>
<%=sc2 %> </body>
</ht
浅析jsp的更多相关文章
- 【HTML5】浅析html使用SSE(Server-Sent Events)连接JSP
目录结构: // contents structure [-] 关于SSE的一些话 什么是SSE SSE的浏览器支持情况 SSE的工作机制 使用SSE连接JSP文件 HTMl页面 服务器端 错误 错误 ...
- JSP的优势与劣势浅析
本文简单介绍了JSP技术,并对JSP的优势与劣势进行了简单的分析.JSP页面由HTML代码和嵌入其中的Java代码所组成. JSP(JavaServer Pages)是由Sun Microsystem ...
- Velocity浅析及与Jsp、Freemarker对比
转载自:http://www.cnblogs.com/petermsdn/archive/2011/05/06/2039178.html Velocity 是一个基于java 的模板引擎(templa ...
- JSP接口浅析
一.tree型关系 JSP页面继承了org.apache.jasper.runtime.HttpJspBase抽象类并实现了org.apache.jasper.runtime.JspSourceDep ...
- JSP中include指令和include动作浅析
一. JSP工作原理 JSP文件是一种Servlet,其工作方式是先部署源代码后编译为.class文件.JSP会在客户端第一次请求JSP文件时被编译成Servlet,由Servlet处理客户端的请求. ...
- 简单的Servlet结合Jsp实现请求和响应以及对doGet和doPost的浅析
1.新建jsp,创建表单 <body> <form action="/MyfirstWeb/login"> username:<input type= ...
- Velocity浅析及与Jsp、Freemarker对比 分类: B1_JAVA 2014-07-21 09:14 637人阅读 评论(0) 收藏
转载自:http://www.cnblogs.com/petermsdn/archive/2011/05/06/2039178.html Velocity 是一个基于java 的模板引擎(templa ...
- http协议和web应用有状态和无状态浅析
http协议和web应用有状态和无状态浅析 (2013-10-14 10:38:06) 转载▼ 标签: it 我们通常说的web应用程序的无状态性的含义是什么呢? 直观的说,“每次的请求都是独立的 ...
- 转载:JMS-ActiveMQ浅析
ActiveMQ 即时通讯服务 浅析 一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE ...
随机推荐
- 如何查看linux系统安装时间
第一种方法: 先查看系统盘挂到哪个分区上,然后用 dumpe2fs 查看这个磁盘分区 创建的时间,即可查出此 服务器 系统安装的时间.() # dumpe2fs /dev/sda3|grep -i ...
- Tensorflow之实现物体检测
目录 项目背景 TensorFlow介绍 环境搭建 模型选用 Api使用说明 运行路由 小结 项目背景 产品看到竞品可以标记物体的功能,秉承一贯的他有我也要有,他没有我更要有的作风,丢过来一网站,说这 ...
- 如何在picture上显示透明Label
- 暑假--升级攻击家庭wifi
参考: 1.http://blog.jobbole.com/64832/ 2.http://blog.jobbole.com/65851/ 3.http://blog.jobbole.com/6562 ...
- arm-linux的gdb移植
转载于:http://blog.chinaunix.net/uid-23381466-id-309369.html arm-linux的gdb移植分为两种情况.一种是交叉调试版.这一种模式是需要编译一 ...
- Rsync快速入门实例(转)
三种主要数据传输方式 单主机本地目录间数据传输(类似cp) Local: rsync [OPTION...] SRC... [DEST] 借助rcp,ssh等通道来传输数据(类似scp) Access ...
- luffy前台配置
目录 axios前后台交互 cokies操作 element-ui页面组件框架 bootstrap页面组件框架 前端主页 图片准备 页头组件:components/Header.vue 轮播图组件:c ...
- OVS+Docker
两台机器操作一样就是IP不同但是设置都是相同的: A机器:192.168.71.142 docker0:172.17.42.1 B机器:192.168.71.136 docker0:172.17.43 ...
- div布局(持续更新)
1. 效果: 代码: <!DOCTYPE html> <html> <head> <meta name="viewport" conten ...
- C#选择文件保存路劲
private void button8_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrow ...