jsp2

简介: jsp2

3. jsp的三种语法

a) jsp头部的page指令

jsp的page指令可以修改jsp页面中的一些重要的属性,或者行为。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
i. language属性     表示jp翻译后是什么语言文件。暂时只支持java。
ii. contentType属性   表示jsp返回的数据类型是什么。也是源码中response.setContentType()参数值
iii.  pageEncoding属性  表示当前jsp页面文件本身的字符集。
iv.  import属性     跟java源代码中一样。用于导包,导类。
==============两个属性是给out输出流使用==================
v. autoflush属性  设置当out输出流缓冲区满了之后,是否自动刷新冲级区。默认值是true。
vi. buffer属性    设置out缓冲区的大小。默认是8kb

缓存区溢出错误



vii.errorPage 属性    设置当jsp页面运行时出错,自动跳转去的错误页面路径。
<!--
errorPage表示错误后自动跳转去的路径<br/>
这个路径一般都是以斜杠打头,它表示请求地址为http://ip:port/工程路径/
映射到代码的Web目录-->
viii.isErrorPage 属性 设置当前jsp页面是否是错误信息页面。默认是false。如果是true可以
获取异常信息。
ix.session 属性     设置访问当前jsp页面,是否会创建HttpSession对象。默认是true。
x.extends  属性     设置jsp翻译出来的java类默认继承谁。

b) jsp中的常用脚本

i.声明脚本(极少使用)

声明脚本的格式是:<%! 声明java代码 %>

作用:可以给jsp翻译出来的java类定义属性和方法甚至是静态代码块、内部类等

练习:

1、声明类属性

2、声明static静态代码块

3、声明类方法

4、声明内部类


ii.表达式脚本(常用)

表达式脚本的格式是: <%=表达式%>

作用:在jsp页面上输出数据。
表达式脚本的特点:

1、所有的表达式脚本都会被翻译到_jspService()方法中

2、表达式脚本都会被翻译成为out,print()输出到页面上

3、由于表达式脚本翻译的内容都在_jspService()方法中,所以_jspService()方法中的对象都可以直接使用。

4、表达式脚本中的表达式不能以分号结束。


练习:

1.输出整型

2.输出浮点型

3.输出字符串

4、输出对象



iii.代码脚本

代码脚本的格式是:

<% java语句 %>

代码脚本的作用是:可以在jsp页面中,编写我们自己需要的功能(写的是java语句)。
代码脚本的特点是:

1、代码脚本翻译之后都在_jspService方法中

2、代码脚本由于翻译到_jspService()方法中,所以在_jspService(方法中的现有对象都可以直接使用。

3、还可以由多个代码脚本块组合完成一个完整的java语句。

4、代码脚本还可以和表达式脚本一起组合使用。在jsp页面上输出数据


练习:

1.代码脚本–if语句

2.代码脚本—for循环语句

3.翻译后java文件中_jspService方法内的代码都可以写



c) jsp中的三种注释

i.html注释

<!–这是html注释–>

html注释会被翻译到java源代码中。在jspService方法里,以out.writer输出到客户端。

ii. java注释

<%

//单行java注释

/*多行java注释*/

%>

java注释会被翻译到java源代码中。

iii. jsp注释

<%–这是jsp注释–%>

jsp注释可以注掉,jsp页面中所有代码。

a.jsp

<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 上午 11:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8"  language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--  1、声明类的属性--%>
    <%!
        private Integer id;
        private String name;
        private  static Map<String,Object> map;
    %>
<%--2、声明static静态代码块--%>
    <%!
        static {
            map=new HashMap<String,Object>();
            map.put("key1","value1");
            map.put("key2","value2");
            map.put("key3","value3");
        }
    %>
<%--3、声明类方法--%>
    <%!
        public int abc(){
            return  12;
        }
    %>
<%--4、声明内部类--%>
    <%!
        public static class A{
            private  Integer id;
            private  String abc="abc";
        }
    %>
<%--练习:--%>
<%--1.输出整型  2.输出浮点型  3.输出字符串  4、输出对象--%>
    <%= 12 %><br/>
    <%= 12.12 %><br/>
    <%= "我是字符串" %><br/>
    <%= map %><br/>
<%--练习:--%>
<%--1.代码脚本--if语句--%>
    <%
        int i=12;
        if(i==12){
    %>
        <h1>我好帅</h1>
      <%
        }else {
      %>
        <h1>骗人</h1>
    <%
        }
    %>
<%--2.代码脚本---for循环语句--%>
    <table border="1" cellspacing="0">
    <%
        for (int j=0;j<10;j++){
    %>
        <tr>
            <td>第<%=j+1%>行</td>
        </tr>
    <%
        }
    %>
    </table>
<%--3.翻译后java文件中_jspService方法内的代码都可以写--%>
    <%
        String username = request.getParameter("username");
        System.out.println("用户名的请求参数值是:"+username);
    %>
<!--这是html注释-->
//单行java注释
/*多行java注释*/
<%--这是jsp注释--%>
</body>
</html>

4. jsp九大内置对象

说明:exception对象在page中设置isErrorPage="true"之后才出现


5. jsp 四大域对象

四个域对象分别是:

pageContext(PageContextlmpl类)   当前jsp页面范围内有效
request(HttpServletRequest类)    一次请求内有效
session (HttpSession类)        一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)
application(ServletContext类)    整个web工程范围内都有效(只要web工程不停止,数据都在)

域对象是可以像Map一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存取范围。


虽然四个域对象都可以存储数据。在使用上它们是有优先顺序的。


四个域在使用的时候,优先顺序分别是,它们从小到大的范围的顺序。


pageContext ===>> request ===>> session ===>> application

演示

注意导入Tomcat的lib下的jsp-api.jar

scope.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 02:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>scope页面</h1>
    <%
        //往四个域中都分别保存了数据
        pageContext.setAttribute("key","pageContext");//导Tomcat的lib下的jsp-api.jar
        request.setAttribute("key","request");
        session.setAttribute("key","session");
        application.setAttribute("key","application");
    %>
    pageContext域是否有值:<%=pageContext.getAttribute("key")%> <br/>
    request域是否有值:<%=request.getAttribute("key")%> <br/>
    session域是否有值:<%=session.getAttribute("key")%> <br/>
    application域是否有值:<%=application.getAttribute("key")%> <br/>
    <%
        request.getRequestDispatcher("/scope2.jsp").forward(request,response);
    %>
</body>
</html>

scope2.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 02:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>scope2页面</h1>
    pageContext域是否有值:<%=pageContext.getAttribute("key")%> <br/><%--scope 请求转发 null--%>
    request域是否有值:<%=request.getAttribute("key")%> <br/><%--单独访问scope2 null--%>
    session域是否有值:<%=session.getAttribute("key")%> <br/><%--关闭浏览器,再次访问scope2 null--%>
    application域是否有值:<%=application.getAttribute("key")%> <br/><%--重新部署/重启 访问scope2 null--%>
</body>
</html>

6. jsp中的out输出和response.getWriter输出的[ 别

response中表示响应,我们经常用于设置返回给客户端的内容(输出)

out也是给用户做输出使用的。

output.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 03:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        out.write("out输出1 <br/>");
//        out.flush();
        out.write("out输出2 <br/>");
        response.getWriter().write("response输出1 <br/>");
        response.getWriter().write("response输出2 <br/>");
    %>
</body>
</html>

由于jsp翻译之后,底层源代码都是使用out来进行输出,所以一般情况下。我们在jsp页面中统一使用out来进行输出。避免打乱页面输出内容的顺序。

out.write()输出字符串没有问题

out.print(,输出任意数据都没有问题(都转换成为字符串后调用的write输出)

深入源码,浅出结论:在jsp页面中,可以统一使用out.print()来进行输出

<%
        out.write(12);//
        out.print(12);//12
%>
相关文章
|
6月前
|
JavaScript Java
jsp使用
jsp使用
|
11月前
|
Java 数据库
Jsp应用
Jsp应用
53 0
|
11月前
|
存储 Java Apache
Jsp相关介绍
Jsp相关介绍
80 0
|
Java
jsp3
jsp3
128 2
|
Java 应用服务中间件 Apache
JSP
JSP
75 0
|
开发框架 Java 数据库连接
为什么使用JSP?
为什么使用JSP?
311 0
|
Java 数据库连接 API
使用jsp
使用jsp
125 0
|
Java
JSP 处理
JSP 处理
92 0
JSP(一)
Java Server Pages: java服务器端页面(可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码) JSP = html + Java脚本(代码片段) + JSP动态标签
117 0
JSP(一)
|
XML SQL Java
JSP(三)
JSP(三)
150 0
JSP(三)