简单学习JSP

  1. JSP:java server page(java 服务端的页面)
  2. jsp可以直接编写html,javascript,css等代码,也可以编写java代码,jsp本身就是一个servlet,只是在语法上更像html
  3. jsp的工作原理:
    1. .jsp文件-->.java文件-->.class文件(jsp先翻译成一个servlet,然后再编译成.clss文件
    2. servlet.java-->.class文件
  4. jsp与servlet的区别
    1. jsp本身就是servlet,但是更适合进行前端的展示,可以直接写html,但是不能直接写java代码
    2. servlet适合编写java的业务逻辑代码
    3. jsp应该与servlet结合使用,servlet进行业务数据处理,jsp用来展示
  5. jsp的基本语法
    1. 注释
      1. html注释:<!--   -->,在翻译成java文件时,以及编译成.class文件时该代码存在
      2. 隐藏注释:<%--  --%>;在编译后,该注释消失
    2. 脚本元素
      1. <%  %>:java代码段,在该标签内直接编写java代码
      2. <%!  %>:声明,在该标签内定义一个方法或者一个属性
      3. <%=  %>:输出表达式内容
      4. <%@ 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>
        	<%--这是隐藏注释,下面定义了一个属性 --%>
        	<%! int i=0; %>
        	<%
        		for(int k=0;k<10;k++){
        			i++;
        		%>
        		<!-- html注释,下面输出10次i的值 -->
        		<h1><%=i %></h1>
        		<%
        		}
        	%>
        </body>
        </html>
      5. 查看jsp文件翻译后的java文件(路径在tomcat服务器的work目录下)查看java代码,可知<%!  %>为类属性,写在service方法外面,<%  %>里面的java代码在service方法里面

    3. jsp指令:通知jsp容器如何处理当前的jsp容器
      1. 指令的格式:<%@  指令名  属性名=“”%>
      2. 三种指令
        1. page
        2. include
        3. taglib
    4. page指令:
      1. import:用来导入一些类的包
      2. contentType:设置发送到客户端的文件类型及编码格式
      3. pageEncoding:文件的编码格式
      4. session:true和false,设置页面是否可以使用会话,默认true
      5. errorPage:指定发生错误跳转的页面
      6. isErrorPage:设置当前页是否为错误页面
    5. include指令
      1. <%@ include file="url"  %>
      2. 使用include指令时,表示当前jsp包含指定的jsp,最终客户端显示的为一个页面(两部分合并为一个)
    6. taglib指令
      1. 用来导入标记库
      2.     <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
            <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    7. forward和redirect的区别
      1. forward为转发,客户端只发送一次请求
      2. redirect为重定向,客户端需要重新发送一次请求
      3. forward只能在当前web程序内部转发,redirect可以重定向到任何资源地址
      4. forward转发时,当前的location地址不变,redirect地址改为重定向的地址
    8. @include指令与include方法的区别
      1. @include指令将两个jsp文件最终生成一个servlet(.java文件),返回给客户端一个页面
      2. include方法会生成两个servlet,在一个servlet中调用另一个servlet的内容,使用同一个request请求
    9. jsp的九大内置对象(可以不声明,直接使用的隐式对象)
      1. page:当前页面对象,作用域为page
      2. session:会话对象 ,作用域session
      3. application:应用程序对象:作用域application
      4. request:请求对象:作用域request(当此请求)
      5. response:响应对象,作用域page
      6. pageContext:页面上下文对象,作用域page
      7. out:输出对象,作用域page
      8. config:配置对象,作用域page
      9. exception:异常对象(只能使用在isErrorPage="true"的jsp中),作用域page
    10. pageContext:页面的上下文,可以向四个作用域对象中存数据
      1. pageContext.setAttribute(String key,Object value,[int scope]);//增加属性,scope为指定的对象
      2. pageContext.getAttribute(String name,[int scope]);//获取属性
    11. 四个作用域对象(session,request,application,page)的作用域及生命周期
      1. <%@ 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>
        	<%
        		pageContext.setAttribute("attr1", "page",PageContext.PAGE_SCOPE);
        		pageContext.setAttribute("attr2", "session",PageContext.SESSION_SCOPE);
        		pageContext.setAttribute("attr3","request", PageContext.REQUEST_SCOPE);
        		pageContext.setAttribute("attr4","application",PageContext.APPLICATION_SCOPE);
        		
        	%>
        	第一个页面数据存储完成<br>
        	
        		page:<%= pageContext.getAttribute("attr1",PageContext.PAGE_SCOPE)%><br>
        		session:<%=pageContext.getAttribute("attr2",PageContext.SESSION_SCOPE) %><br>
        		request:<%=pageContext.getAttribute("attr3",PageContext.REQUEST_SCOPE)%><br>
        		application:<%=pageContext.getAttribute("attr4",PageContext.APPLICATION_SCOPE) %><br>
        		
        		<%
        		//转发给下一个jsp
        		pageContext.forward("page2.jsp"); 
        		
        		%>
        </body>
        </html>
      2. <%@ 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>
        
        读取第一个页面数据<br>
        	
        		page:<%= pageContext.getAttribute("attr1",PageContext.PAGE_SCOPE)%><br>
        		session:<%=pageContext.getAttribute("attr2",PageContext.SESSION_SCOPE) %><br>
        		request:<%=pageContext.getAttribute("attr3",PageContext.REQUEST_SCOPE)%><br>
        		application:<%=pageContext.getAttribute("attr4",PageContext.APPLICATION_SCOPE) %><br>
        		
        
        </body>
        </html>
      3. 测试结果(先不转发,只显示第一个页面)
        第一个页面数据存储完成
        page:page
        session:session
        request:request
        application:application
      4. 转发后得到第二个页面数据
        读取第一个页面数据
        page:null
        session:session
        request:request
        application:application
      5. 直接访问第二个页面
        读取第一个页面数据
        page:null
        session:session
        request:null
        application:application
      6. 关闭浏览器重新访问第二个页面(session id改变)
        读取第一个页面数据
        page:null
        session:null
        request:null
        application:application

  6. 总结:page作用域为当前页面;session为本次会话(浏览器未关闭,session id为同一个);request作用域为当此请求(forward,include为同一个请求);application作用域为application(同一个web程序都可以访问该数据)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值