Web 基础14 JSP入门 语法

1.1 JSP简介

1.1.1 JSP概述

  • JSP概述
    • 全称是Java Server Pages,他和Servlet一样,也是Java所提供的一门用于开发动态WEB资源的技术,
    • JSP也是JavaEE的规范之一,JSP的底层其实就是Servlet。
  • JSP的特点
    • 编写JSP就像编写HTML一样
  • JSP和HTML的区别
    • HTML只能向客户端提供静态数据
    • JSP技术允许我们在页面中嵌套Java代码,从而可以向客户端提供动态的数据

1.1.2 JSP与Servlet的区别

  • Servlet本身的缺点
    • 每一个Servlet都需在web.xml进行配置
    • 显示html元素的时候非常麻烦
  • jsp = html + java + jsp自身的东西 本质Servlet
    • 02-08年 基本上开发全部都是用jsp 可读性非常(html里面加了java代码)
    • 缺点 :单纯的jsp页面不适合做这种大型项目

1.2 JSP的原理

  • 原理:
    • 一个JSP文件第一次被客户端访问时(也包括JSP文件修改后的第一次被访问),WEB服务器会把JSP文件翻译成一个Servlet,
    • 客户端访问JSP文件,其实访问的就是JSP文件翻译后的Servlet,
    • JSP的底层原理其实就是Servlet。
jsp原理.png
  • 一些对Servlet和jsp理解
    • jsp本质是一个Servlet,他的运行也需要容器(tomcat)支持
    • 在jsp和Servlet文件中都可以编写java和html代码,不同的是
      • Servlet虽然可以动态的生成页面内容,但是更加偏向于逻辑的控制
      • jsp最终被转换成 Servlet 在jvm里面执行,在jsp里面虽然可以编写java代码,但是他更加偏向于页面内容的展示
      • 在MVC架构模式中,C通常是由Servlet充当,V通常是由jsp充当

1.3 JSP入门案例

在网页上显示当前时间

<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h1>hello JSP</h1>
    <%
        //脚本片段
        //向客户端发送当前的系统时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String now = sdf.format(new Date());
        //使用内置对象out,可以把数据发送给客户端
        out.println(now);
    %>
</body>
</html>

1.4 JSP默认编码设置

在入门案例案例中可以看到三个编码属性

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

1.5 模版元素&脚本片段

  • 模版元素
    • JSP页面中的HTML标签,CSS样式,以及JS都称之为JSP的模版元素,模版元素定义了页面的结构和外观,
    • JSP翻译后的Servlet中,模版元素会被输出流对象直接发送到客户端。
  • 脚本片段
    • JSP页面中可以嵌套Java代码,Java代码要定义在JSP的脚本片段中,也就是<%%>里面,
    • JSP页面中可以有多个脚本片段,
    • 多个脚本片段之间,可以嵌套文本,嵌套HTML的标签,嵌套其他的JSP元素。
    • 注意: 不能在脚本片段里面定义方法,因为方法不能嵌套定义
  • 总结
    • 模板元素其实就是页面上一堆的html代码
    • 在html中添加java代码,java代码就是脚本片段
  • 代码事例
<%@ 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>
    <%
    HttpSession s = request.getSession();
    Object username = s.getAttribute("username");
    %>
    <h1>itheima</h1>
    <%
        if(null == username){
    %>
        <a href="LoginUI.jsp">登录</a>
    <%
        }else{
    %>
        <a href="OUT.jsp">注销</a>
    <%
        }
    %>
    <hr />
</body>
</html>

1.6声明

  • 在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>
    <!--声明方法 -->
    <%!
        public int sum(int a,int b) {
            return a + b;
        }
    %>
    
    <%
        int result = sum(1,2);
        out.println(result);
    %>
</body>
</html>

1.7脚本表达式

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

  • 总结: 用syso输出的语句,都可以用脚本表达式输出

  • 代码实例


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        //要使用脚本表达式将当前系统时间发送到客户端
        //获取当前系统时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String now = sdf.format(new Date());
    %>
    
    <!-- 脚本表达式 -->
    <%=now %>
    <%="<h1>hello JSP</h1>" %>
    <%=1 + 1 %>
</body>
</html>

1.8 注释

  • HTML的注释:

  • Java代码的注释://,/**/

  • 脚本片段的注释:<%-- --%>

  • 注意:

    • HTML的注释:被注释的文本和代码,会翻译到Servlet中,然后发送到客户端
    • java的注释:被注释的文本和代码,会翻译到Servlet中,不会发送到客户端
    • jsp的注释: 被注释的文本和代码,不会翻译到Servlet中,不会发送到客户端
  • 建议使用第三个 功能最强大 什么都可以注释,也不会翻译最后html中

1.9 总结

  • 模板元素: Html + css + js 对于模板元素,会被翻译到out.println(参数);
  • 脚本片段;java 原样复制到翻译后的java文件里面,复制到service方法 <% %>
  • java声明;翻译到类中,方法外,成员的位置上,可以用来定义成员变量,成员方法<%! %>
  • 脚本表达式:翻译到out.println(参数),注意不能有分号 <%= %>
  • 注释:HTML的注释 java的注释 jsp的注释 <%-- --%>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 6,490评论 1 18
  • 1.什么是JSP (1)jsp全称是Java Server Pages,它和Servlet技术一样都是sun公司定...
    yjaal阅读 9,034评论 5 99
  • 前面讲了servlet入门实践现在开始介绍jsp入门实践,开发环境的搭建请参考我前面的tomcat的文章,jsp入...
    伊豚wall阅读 8,609评论 2 56
  • 1、我们都需要一面“照妖镜” 今年5月23日的晚上,我在上海参加了人生中的第一次磨课。当时,任博老师有一句话让我印...
    小说家郭大侠阅读 3,229评论 0 3
  • 能好好说清的事情,尽量别吵架,你笑了,世界都亮了…
    腊月的猪阅读 1,735评论 0 0