Jsp技术详解

01_JSP的概述&入门案例

JSP概述
全称是Java Server Pages,他和Servlet一样,也是Java所提供的一门用于开发动态WEB资源的技术,
JSP也是JavaEE的规范之一,JSP的底层其实就是Servlet。
JSP的特点
编写JSP就像编写HTML一样
JSP和HTML的区别
HTML只能向客户端提供静态数据
JSP技术允许我们在页面中嵌套Java代码,从而可以向客户端提供动态的数据
Servlet本身的缺点
1,每一个Servlet都需在web.xml进行配置
2,显示html元素的时候非常麻烦
jsp = html + java + jsp自身的东西 本质Servlet
02-08年 基本上开发全部都是用jsp 可读性非常(html里面加了java代码)
单纯的jsp页面不适合做这种大型项目 

02_JSP的原理

一个JSP文件第一次被客户端访问时(也包括JSP文件修改后的第一次被访问),WEB服务器会把JSP文件翻译成一个Servlet,
客户端访问JSP文件,其实访问的就是JSP文件翻译后的Servlet,

JSP的底层原理其实就是Servlet。

谈谈你对Servlet和jsp理解
jsp本质是一个Servlet,他的运行也需要容器(tomcat)支持
在jsp和Servlet文件中都可以编写java和html代码,不同的是
Servlet虽然可以动态的生成页面内容,但是更加偏向于逻辑的控制
jsp最终被转换成 Servlet 在jvm里面执行,在jsp里面虽然可以编写java代码,但是他更加偏向于页面内容的展示
在MVC架构模式中,C通常是由Servlet充当,V通常是由jsp充当

03_JSP默认编码设置

  window - preference -搜索jsp  把Encoding改成UTF-8
  <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  是jsp本身的编码设置,contentType服务器端发给客户端的内容编码的设置(与response.setContentType("")作用是相同)
  pageEncoding 当前jsp页面本身的编码 
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  是告诉浏览器 生成的页面(这个页面是用来展示服务器发来的数据) 所使用的格式和编码,浏览器会根据此来调用相应的
字符集来显示网页内容
http-equiv类似我们http的头部协议,他回应浏览器一些有用的信息,以帮助浏览器正确和精确的显示网页内容

 建议: 工作空间 项目 外加jsp页面 都设置成UTF-8  


04_模版元素&脚本片段

模版元素
JSP页面中的HTML标签,CSS样式,以及JS都称之为JSP的模版元素,模版元素定义了页面的结构和外观,
JSP翻译后的Servlet中,模版元素会被输出流对象直接发送到客户端。
脚本片段
JSP页面中可以嵌套Java代码,Java代码要定义在JSP的脚本片段中,也就是<%%>里面,
JSP页面中可以有多个脚本片段,
多个脚本片段之间,可以嵌套文本,嵌套HTML的标签,嵌套其他的JSP元素
注意: 不能在脚本片段里面定义方法,因为方法不能嵌套定义
模板元素其实就是页面上一堆的html代码
在html中添加java代码,java代码就是脚本片段
	//两种方式
	if(4>0){ 
		<form>
		用户名:<input type="text"/>
		密码:<input type="password"/>
		</form>
	}
页面输出一个99乘法表
快捷键:    
Ctrl+Shift+L 显示所有快捷键   
Ctrl+K 参照选中的词(Word)快速定位到下一个  
Ctrl+Shift+K 参照选中的词(Word)快速定位到上一个  
Ctrl+O 快速显示OutLine   
Ctrl+T 快速显示当前类的继承结构  
Ctrl+Shift+X 把选中文本全部改为大写 
Ctrl+Shift+Y 把选中文本全部改为小写   
Ctrl+Shift+F 按照当前的配置文件格式化源代码  
Ctrl+L 弹出行定位框以便定位到某一行 
Ctrl+Numpad_Divide     Ctrl+/(小键盘) 使代码折叠可用 
Ctrl+Numpad_Multify   Ctrl+*(小键盘) 展开当前类中的所有代码 
Ctrl+Shift+Numpad_Divide     Ctrl+Shift+/(小键盘) 折叠所有,如果不能全部成功折叠, 将光标移到文档最后试着或多按几次   折叠当前类中的所有代码 
Ctrl+1 快速修正,需要导包的时候出现导包提示界面, Ctrl+Q 定位到最后编辑的地方 
Ctrl+Shift+m 导入当前行上需要的包

05_声明

在JSP页面里定义方法,定义成员变量等,<%! %>
注意:不能在声明里面写语句
平时也很少去定义成员变量 ,他是有线程安全问题 用处不大

06_脚本表达式

在JSP页面中将数据发送到客户端,替代JSP页面里的输出语句,
格式:<%=变量/常量/表达式%> //1 + 1
注意:在脚本表达式中不可以写分号
总结: 用syso输出的语句,都可以用脚本表达式输出

07_注释

HTML的注释:<!-- -->
Java代码的注释://,/**/
脚本片段的注释:<%-- --%>
注意:
HTML的注释:被注释的文本和代码,会翻译到Servlet中,然后发送到客户端
java的注释:被注释的文本和代码,会翻译到Servlet中,不会发送到客户端
jsp的注释: 被注释的文本和代码,不会翻译到Servlet中,不会发送到客户端
建议使用第三个 功能最强大 什么都可以注释,也不会翻译最后html中
语法:
模板元素: Html + css + js 对于模板元素,会被翻译到out.println(参数);
脚本片段;java 原样复制到翻译后的java文件里面,复制到service方法   <% %>
java声明;翻译到类中,方法外,成员的位置上,可以用来定义成员变量,成员方法<%! %>
脚本表达式:翻译到out.println(参数),注意不能有分号    <%= %>
注释:HTML的注释  java的注释 jsp的注释  <%-- --%>

08_指令的概述

指令概念
指令并不会直接产生任何可见的输出,作用是告诉WEB服务器如何处理JSP页面的其他部分。
指令的分类
page include taglib
基本格式
<%@ 指令名称 属性="值" %>分类
		<%@ page contentType="text/html;charset=UTF-8" %>
			如果一个指令有多个属性,可以把多个属性写在同一个指令中,也可以把多个属性分开来写
				<%@ page contentType="text/html;charset=UTF-8" import="java.util.Date" %>		
				<%@ page contentType="text/html;charset=UTF-8" %>
				<%@ page import="java.util.Date" %> 	

09_page指令的属性

page
用于定义JSP页面的各种属性,无论定义在JSP页面的哪个位置,所影响的都是整个JSP页面,
建议:将page指令定义在JSP页面的起始位置
属性:
contentType:设置响应的类型和编码
pageEncoding:设置JSP页面的编码,也设置JSP页面翻译成Servlet源文件的编码
import:导入JSP页面所需要使用的Java类
默认已经导入的类
java.lang.*;
javax.servlet.*;
javax.servlet.jsp.*;
javax.servlet.http.*;
导包 Alt + /  用 ctrl + shift + O 没有用的

10_page指令的其他属性

session:设置是否自动创建内置对象session,默认值是true
buffer:设置内置对象out的缓冲区大小,默认值是8k
autoFlush:设置内置对象out是否会自动刷新,默认值是true
extends:设置JSP翻译后的Servlet要继承哪个类,默认值是HttpJspBase
language:设置脚本语言,只有一个值就是java,java也是默认值
isThreadSafe:设置JSP是否是多线程,默认值是true SingleThreadModel
一个软件的默认值的设置,考经验得来的
刚开始,靠项目经理的经验设置
之后,通过压力测试,试运行,通过真实的用户数据 分析之后再做出优化 才去调整
贸然去改 会对系统造成很大的影响
页面输出4-5k
缓冲区设置成64K 占用的内存多,浪费资源
缓冲区设置成1k 一次缓冲不够存,就会频繁的刷新,效率比较低
注意:
默认是多线程 也就是jsp可以同时被多个客户端访问

11_JSP的异常处理机制

分类设置 
<error-page>
	<exception-type>java.lang.ArithmeticException</exception-type>
	<location>/error.jsp</location>
</error-page>
统一设置
<error-page>
	<error-code>500</error-code>
	<location>/error.jsp</location>
</error-page>
第一步: 在web.xml下增加一个error-page标签
第二步: 创建错误提示页面
404-我们正在加紧建设中!  
500-服务器忙,请稍后再试!

12_include指令&taglib指令

include (静态包含指令)
用于在JSP页面中包含其他的WEB资源,把多个WEB资源一起翻译到了一个Servlet中
属性:
file:设置要包含的WEB资源的路径
taglib
引入标签库
属性:
uri:设置引入标签库的路径
prefix:设置引入标签库的别名

13_JSP的九大内置对象

	HttpServletRequest request 请求对象
	HttpServletResponse response 响应对象
	JspWriter out 输出流对象
	HttpSession session 会话对象
	Throwable exception 异常对象
	ServletContext application 代表了整个WEB应用
	ServletConfig config 配置参数,用于获取Servlet的配置参数
	Object page Servlet的对象,方法中的this对象
	PageContext pageContext JSP页面的上下文对象
好处:提高开发效率

14_PageContext的概述和测试

PageContext是JSP技术中最重要的一个对象,他代表了JSP页面的运行环境,
PageContext封装了其他八个内置对象,
PageContext也是一个域对象,可以用来保存数据,范围是当前页面,
PageContext提供了一些WEB开发的常用功能,比如转发和包含,还可以操作检索其他域对象中的数据。
注意:
一定要放对位置,把对象放到session里面 在 Context里面是找不到的
pageContext.findAttribute("username");会在4个域对象当中查找数据,顺序pageContext,request,session,application
pageContext 页面上下文 他其实就是相当于大管家
他包含所有的对象,但是他自己功能很弱
1,获取其他八个对象(用的很少,但是重要)
2,作为域对象存储数据(鸡肋)
  setAttribute(key,value);
	  getAttribute();
	  removeAttribute();
3,进行转发和包含(用的不多)
4,获取所有的4个域对象的数据(重要)
	  setAttribute(key,value,int scope);
	  getAttribute(key,int scope);
	  removeAttribute(key,int scope);
	  findAttribute(key )
	  依次 pageContext,request,session,application查找

15_JSP的四大域对象

	pageContext		当前页面
	request			当前请求
	session			整个会话
	application		整个应用
------补充-----

16_jsp的动作标签

 作用: 简化<% %>的写法 
 常用的动作标签
<jsp:forward />:请求转发
<jsp:include />:页面包含(动态包含)
区别
动态包含是两个文件先编译执行,然后把执行结果包含在一起
静态包含是先将2个文件合并成为一个java文件,然后在编译,执行

动态包含只能包含jsp文件,静态包含可以包含任何文件(html,txt)


17_Jsp原理图


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值