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" %>
Title
<%!
private String name;
private int age;
private static Map map;
%>
<%!
public int show(){
return 1;
}
%>
<%!
static {
map = new HashMap();
map.put("key1","value1");
map.put("key2","value2");
}
%>
<%!
public static class User{
private String name;
private int age;
}
%>
<%= 12 %>
<%= 12.13 %>
<%= "字符串" %>
<%= map %>
<%= request.getParameter("username") %>
<%
int i = 1;
if(i < 5){
System.out.println(i);
}
%>
<%
for(int j = 1; j <= 5; j++){
%>
<%= j %>
<%
}
%>
<%
String username = request.getParameter("username");
System.out.println(username);
%>
二. 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" %>
Title
page1.jsp页面
<%
pageContext.setAttribute("key1","pageContext");
request.setAttribute("key2","request");
session.setAttribute("key3","session");
application.setAttribute("key4","application");
%>
pageContext保存作用域的值:<%=pageContext.getAttribute("key1")%>
request保存作用域的值:<%=request.getAttribute("key2")%>
session保存作用域的值:<%=session.getAttribute("key3")%>
application保存作用域的值:<%=application.getAttribute("key4")%>
<%
request.getRequestDispatcher("/page2.jsp").forward(request,response);
%>
<%
response.sendRedirect("http://localhost:8080/StudyJSP_war_exploded/page2.jsp");
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
page2.jsp页面
pageContext保存作用域的值:<%=pageContext.getAttribute("key1")%>
request保存作用域的值:<%=request.getAttribute("key2")%>
session保存作用域的值:<%=session.getAttribute("key3")%>
application保存作用域的值:<%=application.getAttribute("key4")%>
五. jsp中的out输出和response.getWriter输出的区别
在响应时,首先将out缓冲区的数据追加在response缓冲区的末尾,最后将response缓冲区中的所有数据输出。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
out.write("out输出1
");
out.write("out输出2
");
response.getWriter().write("response输出1
");
response.getWriter().write("response输出2
");
%>
out.write()只能输出字符串,out.print()可以输出任意类型的数据(其本质是把数据都转化成字符串类型然后调用write方法输出)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
out.write("12");
out.write(12); //不会输出
out.print("12");
out.print(12);
%>
六. jsp常用标签
1. jsp静态包含(常用):<%@ include file="要包含的jsp页面路径"%>
会将要包含的页面的内容执行输出在当前页面,当修改包含页面时,当前页面也会随之变化
特点:①静态包含不会翻译被包含的jsp页面;②静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置执行输出
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
主体内容
<%@ include file="/page.jsp"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
包含的页面
2.jsp动态包含:
动态包含也可以像静态包含一样,把被包含的内容执行输出到包含位置
特点:①动态包含会把包含的jsp页面翻译成java代码;②动态包含去调用被包含的jsp页面执行输出;③动态包含可以传递参数
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
主体内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
包含的页面
<%=request.getParameter("username")%>
3.jsp请求转发:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title



