JSP规范、Servlet关系、基础

博客目录

1、什么是JSP
2、JSP与Servlet的关系
3、JSP规范
4、JSP注释、代码块、声明语句块、表达式块
5、JSP基础总结

一、什么是JSP

  1. JSP全称:Java Server Pages
  2. JSP是在传统静态网页HTML中插入Java代码片段和JSP标签的一直文件,后缀为.jsp
  3. 因为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注释<%– –%>
  1. 翻译引擎会将HTML注释翻译到Service方法中的out.write()中,而JSP注释会被忽略成一个\t
  2. 在客户浏览器查看源码时,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>
  1. 可以写在任意位置
  2. 每个<% %>都是联系的,因为都翻译到一个Service中
  3. <% %>中声明变量不能加权限访问控制符,因为<% %>会被翻译到Service方法中,而方法中的变量不能用权限访问控制符
  4. <% %>中不能定义方法,因为被翻译到Service方法中又有方法,在Java中不允许方法的嵌套
  5. <% %>中不能定义静态语句块:static{},方法中不能有静态代码块,静态代码块应该在类中



3、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声明语句块 -->
    <%!
        public void show()
        {
            System.out.println("Java声明语句块");
        }
    %>
    <%
        show();
    %>

</body>
</html>
  1. 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>
  1. 会在浏览器显示name的值
  2. 被翻译到Service中out.print(name);
    这里写图片描述

五、总结

1、JSP代码块
  • <% %>
  • 不能写方法、访问控制符、静态语句块
  • 翻译到Service方法中
2、JSP声明语句块
  • <%! %>
  • 能写方法、访问控制符、静态语句块
  • 翻译到类中
  • 但由于Servlet是单例多线程,其中如果加了可修改成员变量会引起线程安全问题
3、JSP表达式块
  • <%= %>
  • 没有分号
  • <%=name %>:即在浏览器中显示name的值
  • 被翻译到Service方法中:out.print(name);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值