JSP规范、Servlet关系、基础
2018-04-01 17:10
477 查看
博客目录
1、什么是JSP2、JSP与Servlet的关系
3、JSP规范
4、JSP注释、代码块、声明语句块、表达式块
5、JSP基础总结
一、什么是JSP
JSP全称:Java Server PagesJSP是在传统静态网页HTML中插入Java代码片段和JSP标签的一直文件,后缀为.jsp
因为Java是跨平台的,所以JSP也是跨平台
二、JSP与Servlet的关系
JSP文件的本质是Servlet,只不过JSP与Servlet不同的是,JSP是专门用于进行数据展示的Servlet,其有特殊的写法。而普通的Servlet是用于完成业务逻辑处理的。由于Servlet是运行在单例多线程环境下的,所以JSP同样也是运行在单例多线程环境下三、JSP规范
将JSP页面翻译为Servlet的过程,是由Tomcat完成的。在Tomcat内置了一个JSP翻译引擎,当第一次访问该JSP页面时,翻译引擎会将JSP页面翻译为Servlet,例如JSP页面中的HTML,CSS,JavaScript,及普通文本均被翻译到out.write中(例如下图就是JSP编译后的Servlet),Tomcat中的JSP翻译引擎,就遵循了这个JSP规范如何找到JSP编译成Java后的文件
在Tomcat目录下work>Catalina>localhost>项目名称>org>apache>jsp>.java文件
四、JSP注释、代码块、声明语句块、表达式块
1、JSP注释<%– –%>
翻译引擎会将HTML注释翻译到Service方法中的out.write()中,而JSP注释会被忽略成一个\t在客户浏览器查看源码时,HTML注释是可以查看到的,但JSP注释是无法查看的,所以如果是很重要的注释可以写成JSP注释
图1是JSP注释和HTML注释的区别
图2是HTML注释被翻译到了Service方法中,而JSP注释被忽略成一个\t
图1
图2
2、JSP代码块<% %>
<%@ 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>Insert title here</title> </head> <body> <!-- JSP代码块 --> <% String name="linjie"; %> <% System.out.println(name); System.out.println("这是Java代码块"); %> </body> </html>
可以写在任意位置
每个<% %>都是联系的,因为都翻译到一个Service中
<% %>中声明变量不能加权限访问控制符,因为<% %>会被翻译到Service方法中,而方法中的变量不能用权限访问控制符
<% %>中不能定义方法,因为被翻译到Service方法中又有方法,在Java中不允许方法的嵌套
<% %>中不能定义静态语句块:static{},方法中不能有静态代码块,静态代码块应该在类中
3、JSP声明语句块<%! %>
<%@ page language="java" contentType="text/html; c5c8 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>Insert title here</title> </head> <body> <!--JSP声明语句块 --> <%! public void show() { System.out.println("Java声明语句块"); } %> <% show(); %> </body> </html>
JSP声明语句块被翻译的位置改变了:翻译到了类中,成为了成员变量、成员方法,可以修改(但会造成线程安全问题,因为Servlet是单例多线程的,如果有可修改的成员变量,则会引起线程安全问题,所以一般Servlet不加成员变量)
4、JSP表达式块<%= %>
<%@ 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>Insert title here</title> </head> <body> <% String name="linjie"; %> <!-- JSP表达式块 --> <%=name %> </body> </html>
会在浏览器显示name的值
被翻译到Service中out.print(name);
五、总结
1、JSP代码块
<% %>不能写方法、访问控制符、静态语句块
翻译到Service方法中
2、JSP声明语句块
<%! %>能写方法、访问控制符、静态语句块
翻译到类中
但由于Servlet是单例多线程,其中如果加了可修改成员变量会引起线程安全问题
3、JSP表达式块
<%= %>没有分号
<%=name %>:即在浏览器中显示name的值
被翻译到Service方法中:out.print(name);
相关文章推荐
- Servlet和JSP规范及版本对应关系
- Servlet和JSP规范及版本对应关系
- Servlet和JSP规范及版本对应关系
- Servlet和JSP规范及版本对应关系
- Servlet和JSP规范及版本对应关系
- Servlet和JSP规范及版本对应关系
- Servlet/JSP各规范与Web服务器Tomcat各版本的对应关系
- Servlet和JSP规范及版本对应关系
- Servlet/JSP规范和JavaEE版本对应关系
- Servlet和JSP规范及版本对应关系
- Tomcat不同版本对Servlet和JSP规范版本的支持和对应关系
- Web基础之Servlet+JDBC+JSP项目实战记录(二)
- JSP规范与J2EE有什么样的关系?
- jsp和servlet的关系
- tomcat8.5基础 相应的Servlet、JSP的版本信息
- jsp Servlet基础入门学习篇 十二、脚本元素、指令和预定义变量
- 过滤器,监听器,Servlet 线程安全,JSP基础
- 初探JSP运行机制和与Servlet间的关系
- 一句话理解 之 servlet jsp页面 Dao javaBean 之间的逻辑关系
- Servlet基础之JSP的八个隐含对象