- JSP:java server page(java 服务端的页面)
- jsp可以直接编写html,javascript,css等代码,也可以编写java代码,jsp本身就是一个servlet,只是在语法上更像html
- jsp的工作原理:
- .jsp文件-->.java文件-->.class文件(jsp先翻译成一个servlet,然后再编译成.clss文件)
- servlet.java-->.class文件
- jsp与servlet的区别
- jsp本身就是servlet,但是更适合进行前端的展示,可以直接写html,但是不能直接写java代码
- servlet适合编写java的业务逻辑代码
- jsp应该与servlet结合使用,servlet进行业务数据处理,jsp用来展示
- jsp的基本语法
- 注释
- html注释:<!-- -->,在翻译成java文件时,以及编译成.class文件时该代码存在
- 隐藏注释:<%-- --%>;在编译后,该注释消失
- 脚本元素
- <% %>: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> <%--这是隐藏注释,下面定义了一个属性 --%> <%! int i=0; %> <% for(int k=0;k<10;k++){ i++; %> <!-- html注释,下面输出10次i的值 --> <h1><%=i %></h1> <% } %> </body> </html>
- 查看jsp文件翻译后的java文件(路径在tomcat服务器的work目录下)查看java代码,可知<%! %>为类属性,写在service方法外面,<% %>里面的java代码在service方法里面
- jsp指令:通知jsp容器如何处理当前的jsp容器
- 指令的格式:<%@ 指令名 属性名=“”%>
- 三种指令
- page
- include
- taglib
- page指令:
- import:用来导入一些类的包
- contentType:设置发送到客户端的文件类型及编码格式
- pageEncoding:文件的编码格式
- session:true和false,设置页面是否可以使用会话,默认true
- errorPage:指定发生错误跳转的页面
- isErrorPage:设置当前页是否为错误页面
- include指令
- <%@ include file="url" %>
- 使用include指令时,表示当前jsp包含指定的jsp,最终客户端显示的为一个页面(两部分合并为一个)
- taglib指令
- 用来导入标记库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
- forward和redirect的区别
- forward为转发,客户端只发送一次请求
- redirect为重定向,客户端需要重新发送一次请求
- forward只能在当前web程序内部转发,redirect可以重定向到任何资源地址
- forward转发时,当前的location地址不变,redirect地址改为重定向的地址
- @include指令与include方法的区别
- @include指令将两个jsp文件最终生成一个servlet(.java文件),返回给客户端一个页面
- include方法会生成两个servlet,在一个servlet中调用另一个servlet的内容,使用同一个request请求
- jsp的九大内置对象(可以不声明,直接使用的隐式对象)
- page:当前页面对象,作用域为page
- session:会话对象 ,作用域session
- application:应用程序对象:作用域application
- request:请求对象:作用域request(当此请求)
- response:响应对象,作用域page
- pageContext:页面上下文对象,作用域page
- out:输出对象,作用域page
- config:配置对象,作用域page
- exception:异常对象(只能使用在isErrorPage="true"的jsp中),作用域page
- pageContext:页面的上下文,可以向四个作用域对象中存数据
- pageContext.setAttribute(String key,Object value,[int scope]);//增加属性,scope为指定的对象
- pageContext.getAttribute(String name,[int scope]);//获取属性
- 四个作用域对象(session,request,application,page)的作用域及生命周期
<%@ 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>
<%@ 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>
- 测试结果(先不转发,只显示第一个页面)
第一个页面数据存储完成 page:page session:session request:request application:application
- 转发后得到第二个页面数据
读取第一个页面数据 page:null session:session request:request application:application
- 直接访问第二个页面
读取第一个页面数据 page:null session:session request:null application:application
- 关闭浏览器重新访问第二个页面(session id改变)
读取第一个页面数据 page:null session:null request:null application:application
- 注释
- 总结:page作用域为当前页面;session为本次会话(浏览器未关闭,session id为同一个);request作用域为当此请求(forward,include为同一个请求);application作用域为application(同一个web程序都可以访问该数据)
简单学习JSP
最新推荐文章于 2022-07-22 18:20:00 发布