一、JSP运行原理和运行机制
JSP(Java Server Pages)是一种在服务器端执行的动态网页技术,其运行原理和运行机制如下:
-
首先,客户端发送一个HTTP请求到服务器,请求访问一个JSP页面。
-
服务器接收到这个请求后,会将JSP页面交给JSP引擎进行处理。
-
JSP引擎会对JSP页面进行解析,并生成一个对应的Servlet代码。
-
生成的Servlet代码会被编译成可执行的Java字节码,然后被加载到内存中。
-
一旦Servlet代码被加载到内存中,服务器就会创建一个Servlet实例,并使用该实例来处理当前的请求。
-
Servlet实例会根据请求的参数和逻辑,生成动态的HTML代码,并将其发送给客户端。
-
客户端接收到服务器返回的HTML代码,将其显示在浏览器中。
需要注意的是,JSP页面中的Java代码会被JSP引擎自动转化为Servlet代码,并在运行时执行。同时,JSP页面中的静态内容会直接输出给客户端,而动态内容则会在服务器端生成,并发送给客户端。这样就实现了将Java代码和HTML代码混合的动态网页生成和运行过程。
二、JSP的组成部分:
1.指令部分:对当前页面的设置,必须写在当前页面的第一行:
<%@ page language=”java” pageEncoding=”utf-8” %>
2.HTML静态页面部分
3.小脚本部分(写在HTML的body里面,我们写的是java程序):<%--小脚本部分--%>
4.表达式部分:负责输出显示内容到页面: <%= 输出内容 %>、
注释:html注释客户端源码可见: <!—内容-->
Jsp注释客户端源码不可见:<%--内容--%>
例如:Page部分
<%@ page
contentType="text/html;charset=编码集" pageEncoding="编码集"
language="java" //目前所学就选java
isELIgnored="false|true"
autoFlush="false|true" buffer="缓冲区大小"
errorPage="错误页面地址" isErrorPage="false|true" //设定是否为错误页面
extends="继承那个页面"
info="当前介绍"
isThreadSafe="false|true"
session="false|true" %>
三、九大内置内置对象
描述:
a) 在Jsp开发中,Jsp提供了9个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。
b) pageContext, request, response, session, application, config, out, page, exception;常用的是前面 5个,需要熟练掌握。
c) 在Jsp开发中,可以保存数据,Jsp提供了四种数据保存范围;分别是 page,request,session,application。
1.Out 对象
out对象:输出对象
数据类型:PrintWriter
方法:
out.print("abcd");
out.flush();
out.close();
2.page对象
page对象:当前对象,代表当前页面的对象
数据类型:Object
3.Request 对象
数据类型:servletRequest (大类别)、HttpServletRequest(小类别)
Request的生命周期:请求开始--->响应结束;
方法一:
request.getServerName(); //服务器ip
request.getServerPort(); //服务器端口
request.getRemotePort(); //客户端端口号
request.getRemoteUser(); //windows的
request.getRemoteHost(); //客户端
request.getRemoteAddr(); //客户端
request.getAuthType(); //
request.getMethod(); //请求方法
request.getRequestURL(); //请求地址
方法二:
request.setCharacterEncoding("utf-8"); //设置请求的编码集,只针对post请求,对get请求没有用;
request.getParameter("key"); //获取浏览器传过来的key的value值,用String类型接受,(单个值),比如一些单选框的内容等
request.getParameterValues("key"); //获取浏览器传过来的key的多个value值,用 String[] 类型接受,(多个值),比如一些多选框的内容等
Map<String,String[]> all = request.getParameterMap(); //接受浏览器传过来的所有的值;
方法三:
request.setAttribute("key",value); //向request容器中放value(object),起一个名称key(String)
Object value = request.getAttribute("key"); //从request容器中获取指定的key的value值
request.removeAttribute("key"); //删除request容器中指定的key
request.getRequestDispatcher("url").forward(request,response);//转发
4.Response 对象
Response 对象:响应对象,服务器对浏览器的响应
数据类型:ServletResponse | HttpServletResponse
方法:
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.sendRedirect("url"); //重定向
注:转发和重定向区别:(类比借钱的列子)
转发:一次请求一次响应
重定向:两次请求两次次响应
5. Session 对象
session 对象:会话对象,浏览器和服务器的一次通话,包含浏览器的多次请求和服务器的多次响应;
数据类型:HttpSession
生命周期:
开始:浏览器第一次请求服务器开始
结束: 1.浏览器关闭;
2.服务器关闭;
3.最大等待时间到;
4.执行了 invalidate() 方法;
方法一:
session.setAttribute("A","abc");
session.removeAttribute("A");
session.getAttribute("A");
方法二:
session.getId(); //获得请求的ID
session.isNew(); //是否是第一次请求
session.getCreationTime(); //获取第一次请求时间
session.getLastAccessedTime(); //获取最后一次请求时间
session.getMaxInactiveInterval(); //获取最大等待时间
session.setMaxInactiveInterval(); //设置最大等待时间,以秒计;若不设置则默认为半小时;
6.application 对象
application 对象:上下文对象、代表服务器的全局对象,一个服务器只有一个application
数据类型:ServletContext;
生命周期:服务器启动----->服务器关闭
方法:
application.setAttribute("A","abc");
application.removeAttribute("A");
application.getAttribute("A");
7. exception 对象
exception 对象:异常对象,代表当前页面的出现的异常,只有在错误的页面才能使用;
数据类型:Throwable
8.pageContext 对象
pageContext 对象:全文对象,管理其他对象和容器的
pageContext 内置对象由Jsp 容器创建并初始化,pageContext 对象提供了对JSP 页面所有对象及控件的访问
数据类型:PageContext
9.config 对象
四、Jsp 四大作用域
- Page 范围:只在一个页面中保存数据;
- Request 范围:只在一个请求中保存数据;
- Session 范围:在一次会话范围中保存数据,仅供单个用户使用;
- Application 范围:在整个服务器上保存数据,所有用户共享;