学习记录21
1、JSP规范的定义
- JAVAEE规范中一种
- 制定了一个开发流程:开发JSP文件代替响应对象将处理结果写入到响应体
- 制定了一个操作流程:Http服务器应该如何调用管理JSP文件
2、为何使用JSP文件代替响应对象
-
响应对象的缺点
- 响应对象适合数据量较少的处理结果
数量过多,增加开发难度
- 响应对象适合数据量较少的处理结果
-
JSP文件的优势
- 降低将处理结果写入的开发工作量
- 降低处理结果维护难度
- 开发时:可以直接将处理结果写入到JSP文件,不需要手写out.print命令
调用时:自动的将JSP文件的所有内容,通过输出流写入到响应体
3、HTML与JSP的区别
-
资源文件类型不同
- HTML文件属于静态资源文件,其相关命令需要在浏览器编译并执行的
- JSP文件属于动态资源文件,其相关命令需要在服务端编译并执行的
-
调用形式不同
- 访问HTML文件:Http服务器直接通过一个输出流, 将HTML文件所有内容写入到响应体
- 访问JSP文件:Http服务器根据JSP规范来操作,JSP文件编辑---->编译----->调用
4、JSP文件中Java命令书写规则
- 输入标记,只能在执行标记中书写:
<% pJava命令语句] %>
- 将JSP文件中的Java命令与普通执行结果区分
- 能声明Java变量
- 能声明运算表达式:数学运算、关系运算、逻辑运算
- 能声明控制语句
- 如:
<% int a =10; %>
<% boolean flag = 30 >= 40; %>
<%
if(判断条件){
}else{}
while(){}
%>
- 输出标记,格式:
<%= [java的变量名] %>
或<%= [java的表达式] %>
- 通知Tomcat,将输出标记中的【变量的值】或【表达式运算结果】写入到响应体
5、JSP文件内置对象
- request对象
<!--
JSP文件内置对象:request
类型:HttpServletRequest
作用:在JSP文件运行时读取请求包信息,与Servlet在请求转发过程中实现数据共享
浏览器:http://localhost:8080/myWeb/request.jsp?userName=aaa&password=123
-->
<%
// 在JSP文件执行时,借助于内置request对象读取请求包参数信息
String userName = request.getParameter("userName");
String password = request.getParameter("password");
%>
来访用户姓名:<%=userName%><br/>
来访用户密码:<%=password%>
- session对象
- 两个session之间进行通信
<!--
JSP文件内置对象:session
类型:HttpSession
作用:在JSP文件运行时,可以session指向当前用户私人储物柜,添加共享数据,或者读取共享数据
-->
<!--将共享数据添加到当前用户私人储物柜-->
<%
// HttpSession session = request.getSession();
session.setAttribute("key1", 200);
%>
<!--
session_1.jsp 与 session_2.jsp 为同一个用户/浏览器提供服务,
因此可以使用当前用户在服务端的私人储物柜进行数据共享
-->
<%
Integer value = (Integer) session.getAttribute("key1");
%>
session_2.jsp从当前用户session中读取数据:<%=value%>
- application对象
- jsp内设置,Servlet获取
<!--
ServletContext application; 全局作用域对象
同一个网站中Servlet与JSP,都可以通过当前网站的全局作用域对象实现数据共享
JSP文件内置对象:application
-->
<%
application.setAttribute("key2", "Hello JSP's application");
%>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext appliction = request.getServletContext();
String value = (String) appliction.getAttribute("key2");
System.out.println("value = " + value);
}