JSP学习(1)—— 基本语法

JSP主要作用是代替Servlet程序回传html页面的数据。

jsp页面和html页面一样,都是存放在web目录下,访问jsp页面也和访问html页面一样。

jsp本质上是Servlet程序,当访问jsp页面时,Tomcat服务器会把jsp页面翻译成java文件。

一. jsp三种脚本

1. 声明脚本:<%! %> (极少使用)

作用:在其中可以声明类属性、方法、静态代码块、内部类等,声明方式与java一样。

2. 表达式脚本:<%= %>

作用:在jsp页面上可以输出数据(整型、浮点型、字符串型、对象)

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

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

③由于表达式脚本翻译到_jspService()方法中,所以_jspService()方法中的对象都可以直接使用

④表达式脚本中的表达式不能以分号结束

3. 代码脚本:<% %>

作用:在jsp页面编写需要的功能(写的是java语句)

①所有代码脚本都会被翻译到_jspService()方法中

②由于代码脚本翻译到_jspService()方法中,所以_jspService()方法中的对象都可以直接使用

③可以由多个代码脚本组合完成一个完整的java语句

④代码脚本可以和表达式脚本一起组合使用

<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <!-- 声明属性 -->
    <%!
        private String name;
        private int age;
        private static Map<String,Object> map;
    %>
    <!-- 声明方法 -->
    <%!
        public int show(){
            return 1;
        }
    %>
    <!-- 声明静态代码块 -->
    <%!
        static {
            map = new HashMap<String,Object>();
            map.put("key1","value1");
            map.put("key2","value2");
        }
    %>
    <!-- 声明内部类 -->
    <%!
        public static class User{
            private String name;
            private int age;
        }
    %>

    <%= 12 %><br/>
    <%= 12.13 %><br/>
    <%= "字符串" %><br/>
    <%= map %><br/>
    <%= request.getParameter("username") %><br/>

    <%
        int i = 1;
        if(i < 5){
            System.out.println(i);
        }
    %>

    <%
        for(int j = 1; j <= 5; j++){
    %>
            <%= j %><br>
    <%
        }
    %>

    <%
        String username = request.getParameter("username");
        System.out.println(username);
    %>
</body>
</html>

 二. jsp中的注释

1. html注释:<!--   -->,会被翻译到java源代码中,在_jspService()方法中以out.writer输出到客户端

2. java注释:// 和 /* */,通常使用在表达式脚本和代码脚本中,会被翻译到java源代码中

3. jsp注释:<%--   %-->,可以注释jsp中的所有代码

三. jsp中的内置对象

jsp的内置对象是指Tomcat在翻译jsp页面成为Servlet源代码后,内部提供的9个对象

1. request:请求对象;2. response:响应对象;3. pageContext:jsp的上下文对象

4. session:会话对象;5. application:ServletContext对象;6. config:ServletConfig对象

7. out:jsp输出流对象;8. page:指向当前jsp的对象;9. exception:异常对象

四. jsp四大域对象

pageContext(PageContextImpl类):当前jsp页面范围内有效

request(HttpServletRequest类):一次请求响应内有效

session(HttpSession类):一次会话内有效

application(ServletContext类):整个web工程范围内有效

参考:https://blog.csdn.net/Archer__13/article/details/123775110

使用的优先顺序:按照从小到大的范围顺序(pageContext --> request --> session --> application) 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>page1.jsp页面</h1>
    <%
        pageContext.setAttribute("key1","pageContext");
        request.setAttribute("key2","request");
        session.setAttribute("key3","session");
        application.setAttribute("key4","application");
    %>
    <!-- 1.此时当访问page1.jsp页面时,都可以取到对应的值 -->
    pageContext保存作用域的值:<%=pageContext.getAttribute("key1")%><br/>
    request保存作用域的值:<%=request.getAttribute("key2")%><br/>
    session保存作用域的值:<%=session.getAttribute("key3")%><br/>
    application保存作用域的值:<%=application.getAttribute("key4")%><br/>

    <!-- 2.此时当访问page1.页面时,此时取不到pageContext中的值-->
    <%
        request.getRequestDispatcher("/page2.jsp").forward(request,response);
    %>

    <!-- 3.此时当访问page1.jsp页面时,此时取不到pageContext和request中的值-->
    <%
        response.sendRedirect("http://localhost:8080/StudyJSP_war_exploded/page2.jsp");
    %>

    <!-- 4.当用其他客户端直接访问page2.jsp页面时,此时取不到pageContext、request和session中的值-->

    <!-- 5.当重启服务器,然后直接访问page2.jsp页面时,此时取不到pageContext、request、session和application中的值-->
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>page2.jsp页面</h1>
    pageContext保存作用域的值:<%=pageContext.getAttribute("key1")%><br/>
    request保存作用域的值:<%=request.getAttribute("key2")%><br/>
    session保存作用域的值:<%=session.getAttribute("key3")%><br/>
    application保存作用域的值:<%=application.getAttribute("key4")%><br/>
</body>
</html>

五. jsp中的out输出和response.getWriter输出的区别

在响应时,首先将out缓冲区的数据追加在response缓冲区的末尾,最后将response缓冲区中的所有数据输出。 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        out.write("out输出1 <br/>");
        out.write("out输出2 <br/>");
        response.getWriter().write("response输出1 <br/>");
        response.getWriter().write("response输出2 <br/>");
    %>
</body>
</html>

out.write()只能输出字符串,out.print()可以输出任意类型的数据(其本质是把数据都转化成字符串类型然后调用write方法输出) 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        out.write("12");
        out.write(12);     //不会输出
        out.print("12");
        out.print(12);
    %>
</body>
</html>

六. jsp常用标签

1. jsp静态包含(常用):<%@ include file="要包含的jsp页面路径"%>

    会将要包含的页面的内容执行输出在当前页面,当修改包含页面时,当前页面也会随之变化

    特点:①静态包含不会翻译被包含的jsp页面;②静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置执行输出

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    主体内容<br>
    <%@ include file="/page.jsp"%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    包含的页面
</body>
</html>

 

2.jsp动态包含:<jsp:include page=" "></jsp:include>

     动态包含也可以像静态包含一样,把被包含的内容执行输出到包含位置

     特点:①动态包含会把包含的jsp页面翻译成java代码;②动态包含去调用被包含的jsp页面执行输出;③动态包含可以传递参数

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    主体内容<br>
    <jsp:include page="/page.jsp">
        <jsp:param name="username" value="Tom"/>
        <jsp:param name="password" value="root"/>
    </jsp:include>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    包含的页面 <br/>
    <%=request.getParameter("username")%>
</body>
</html>

  

3.jsp请求转发:<jsp:forward page="请求转发路径"></jsp:forward>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <jsp:forward page="page.jsp"></jsp:forward>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值