JSP

JSP

 

jsp:java server pages(java服务器页面)
    本质上jsp就是一个servlet,在html代码中嵌套java代码,
    运行在服务器端,处理请求,生成动态的内容.
    对应的java和class文件在tomcat目录下的work目录
    后缀名 .jsp
  执行流程:
        1.浏览器发送请求,访问jsp页面
        2.服务器接受请求,jspSerlvet会帮我们查找对应的jsp文件
        3.服务器将jsp页面翻译成java文件.
        4.jvm会将java编译成.class文件
        5.服务器运行class文件,生成动态的内容.
        6.将内容发送给服务器,
        7.服务器组成响应信息,发送给浏览器
        8.浏览器接受数据,解析展示
jsp的脚本:    
        <%...%> java程序片段
            生成成jsp的service方法中
        <%=...%> 输出表达式
            生成成jsp的service方法中,相当于在java中调用out.print(..)
        <%!...%> 声明成员
            成员位置.

  小案例-jsp脚本

   jsp页面代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>
    <!-- 1、浏览器中输出hello world -->
    hello world!<br/>
    
    <!-- 2、eclipse中console输出:3 -->
    <%
    int i = 3;
    System.out.println(3);
    %>
    
    <!-- 3、浏览器输出:3 -->
    <%=i %>
    
    <!-- 4、浏览器输出,但是中文乱码 -->
    <%
    out.print("你好");
    %>
    
    <!-- 浏览器输出为:9 -->
    <%=k %>
    <%!
        int k=9;
    %>    
</body>
</html>

 

jsp的指令
    作用:声明jsp页面的一些属性和动作
    格式:
        <%@指令名称 属性="值" 属性="值"%>
    jsp指令的分类:
        page:主要声明jsp页面的一些属性、以及jar包
        include:静态包含.
        taglib:导入标签库
    注意:
        一个页面中可以出现多个指令
        指令可以放在任意位置,一般都放在jsp页面最上面.
运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下.
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.*" %>

 

page指令:
        重要属性:3个
            contentType:设置响应流的编码,及通知浏览器用什么编码打开.设置文件的mimetype
            pageEncoding:设置页面的编码
            import:导入所需要的包
            contentType和pageEncoding联系:
                若两者都出现的时候,各自使用各自的编码
                若只出现一者,两个都使用出现的这个编码
                若两者都不出现,使用服务器默认的编码 tomcat7使用的iso-8859-1
        了解属性:
            language:当前jsp页面里面可以嵌套的语言
            buffer:设置jsp页面的流的缓冲区的大小
            autoFlush:是否自动刷新
            extends:声明当前jsp的页面继承于那个类.必须继承的是httpservlet 及其子类
            session:设置jsp页面是否可以使用session内置对象
            isELIgnored:是否忽略el表达式
            errorPage:当前jsp页面出现异常的时候要跳转到的jsp页面
            isErrorPage:当前jsp页面是否是一个错误页面
                若值为true,可以使用jsp页面的一个内置对象 exception

 

include指令:
    静态包含,就是将其他页面或者servlet的内容包含进来,一起进行编译运行.生成一个java文件.
        格式:
            <%@include file="相对路径或者是内部路径" %>
        例如:
            <%@include file="/jsp/include/i1.jsp" %>
  路径:
      相对路径:
          ./或者什么都不写 当前路径
          上一级路径  ../
      绝对路径:
          带协议和主机的绝对路径
          不带协议和主机的绝对路径
              /项目名/资源
                    
      内部路径:
          不带协议和主机的绝对路径去掉项目名
              请求转发 静态包含 动态包含

示例---include指令:

   include.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>include指令</title>
</head>
<body>
    include页面
    <hr>
        text.jsp的内容为:<%@include file="/text.jsp" %>
    <hr>
</body>
</html>

  text.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>text页面</title>
</head>
<body>
    这是一个测试页面,嘻嘻嘻~~~~<hr><a style="color:red;">点我跳转</a>
</body>
</html>

 

taglib指令:导入标签库    
        格式:
             <%@taglib prefix="前缀名" uri="名称空间" %>
        若导入之后
            <前缀名:标签 .. >
        例如:
            <c:if test="">输出内容</c:if>

 

jsp的内置对象:★★★(9大内置对象):即在jsp页面上可以直接使用的对象
        内置对象            类型
        out                JspWriter
        request            HttpServletRequest
        response        HttpServletResponse
        session            HttpSession
        
        exception        Throwable
        
        page            Servlet(this)
        config            ServletConfig
        application        ServletContext
        
        pageContext        PageContext
jsp的域对象:理解
        application        整个项目
        session            一次会话
        request            一次请求
        pageContext        一个页面

 

pagecontext作用:理解
        1.域对象
            xxxAttribute()
        2.操作其他域对象
            方法:
                xxxAttribute(...,int scope);
                    scope取值:
                        APPLICATION_SCOPE 
                        SESSION_SCOPE 
                        REQUEST_SCOPE 
                        PAGE_SCOPE 
        3.获取其他的内置对象
            getXxx()
            注意:
                getRequest():获取request内置对象
        4.便捷查找,
            findAttribute(String key):
                依次从pagecontext,request,session,application四个域中,查找相应的属性,若查找到了返回值,且结束该次查找
                若查找不到,返回一个null

案例:pageContext操作其他域对象

<%@ 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>pageContext操作其他的域对象</title>
</head>
<body>
    <%
        pageContext.setAttribute("rkey", "rvalue",pageContext.REQUEST_SCOPE);
    %>
    
    通过pageContext往request中放入一个键值对,取出来为:
    <%=request.getAttribute("rkey")%>
</body>
</html>

   启动tomcat,浏览器中输入url,回车,查看页面显示如下:

 

jsp的动作标签
    <jsp:forward>:请求转发  相当于java中  request.getRequestDispatcher(..).forward(..);
        <jsp:forward page="内部路径"></jsp:forward>
    <jsp:include>:动态包含
        就是将被包含页面或者servlet的运行结果包含到当前页面中.

案例1--jsp动作标签forward

  forward.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>text页面</title>
</head>
<body>
    <jsp:forward page="/for1.jsp"></jsp:forward>
</body>
</html>

  for1.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>text页面</title>
</head>
<body>
    已经跳转到for1.jsp页面了~~~~
</body>
</html>

  浏览器输入url“ http://localhost:8080/Jsp/forward.jsp”,显示for1.jsp的页面内容,但是url不变:

 

案例2--jsp动作标签include:

   include2.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>include动作标签</title>
</head>
<body>
    include动作标签
    <hr>
        <jsp:include page="/text.jsp"></jsp:include>        
    <hr>
</body>
</html>

  text.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>text页面</title>
</head>
<body>
    这是一个测试页面,嘻嘻嘻~~~~<hr>
</body>
</html>

  启动tomcat,浏览器中输入http://localhost:8080/Jsp/include2.jsp,回车,

 

jsp注释:
    html注释 <!--  -->
        注释的内容只在页面上看不到  java代码和html源代码都有
    java注释 
        只在java代码中存在
    jsp注释 <%--  --%>
        只在jsp页面中存在,翻译成java文件之后就没有了

 

el:
  jsp的内置表达式语言,从jsp2.0开始,用来替代<%=..%>
具体参见博客:https://www.cnblogs.com/hejh/p/11063216.html

 

 

jstl:
  jsp标准的标签库语言,apache的,用来替代java脚本
参见博客:https://www.cnblogs.com/hejh/p/11063258.html

 

posted @ 2019-06-14 15:43  雪顶儿  阅读(200)  评论(0编辑  收藏  举报