1.JSP基础: 本质: 一个servlet
JSP三大指令: 指令语法: <%@ 指令名 属性名=属性值 %>
page指令: 比如导包,嵌套页面等
<!--
contentType: 设置类型和字符编码
errorPage: 定义错误页面,出错时才会发生跳转
isErrorPage: 值为true/false,表示当前页面是否为错误页面
import: 导包
language: 定义脚本语言,目前只有java
pageEncoding: 设置字符编码
isELIgnored: 值为true/false,表示是否忽略EL表达式
-->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>
taglib指令:
<!-- 导入扩展包,如JSTL标签库 -->
<%@ taglib %>
include指令:
<!--
该方法是静态包含/静态加载,相当于被包含页面的整个内容嵌入到包含页面中
jsp解析引擎在解析时,会将两个页面解析成一个servlet文件,再经过java编译器 编译生成一个class文件
-->
<%@ include file="_04_include.jsp" %>
<!--
该方法为 动态包含
生成两个java和两个class文件,在包含页面中 动态的去把被包含的页面加载过来
flush="true":必须要加,如果不设置成true,就会把被包含的页面生成一条html语句一次性的导入进来,如果数据缓存区过多,容易出现问题
-->
<jsp:include page="_04_include.jsp" flush="true"></jsp:include>
脚本片段: jsp中可以书写java代码,但是需要在脚本片段中书写Java代码
<!-- 脚本片段类似于类中的方法体,所有脚本片段最终会被合并为一个 -->
<%
<!-- java代码块 -->
System.out.println("----");
out.println("我是servic方法");
%>
脚本表达式: 功能类似于out.print(变量名)
<%
String str = "admin";
%>
<%=str %>
jsp声明: 在jsp声明中定义方法(类体)
<%!
int i;
public void m1(){
System.out.println("=====");
}
%>
注: 如需定义一个方法,就在jsp声明中定义,而调用方法或需要书写其他代码,就在脚本片段
2.JSP中九大内置对象:
变量名 | 真实类型 | 作用 |
pageContext | pageContext | 当前页面的共享数据 还可以获取其他八个内置对象 |
request | HttpservletRequest | 一次请求访问的多个资源 |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(servlet)的对象this |
out | JspWriter | 将数据输出到页面 |
config | ServletConfig | Servlet的配置对象 |
exception | Thowable | 异常对象 |
out: 输出流,用来个客户端返回信息
<%
out.print('a'); // 向客户端输出各种类型数据
// out.flush(); // 先输出缓冲区数据再清空
%>
request:
<!--
getScheme(): 获取协议名称
getServerName(): 获取服务器的名字
getServerPort(): 获取服务器端的端口
getContextPath(): 获取当前项目名
-->
<%
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +request.getContextPath()+"/";
%>
response:
<%
/*
addCookie():添加一个Cookie对象,用于在客户端保存特定信息
sendRedirect():重定向到jsp文件
*/
response.addCookie("xxx");
%>
session 和 application:
Exception: 异常对象,如果有什么异常信息,页面可以使用exception直接获取
config: ServletConfig 配置对象
page: this,也是域,表示当前页面有效
3.jsp 与 servlet 之间的几种跳转方式:
jsp 跳转到 jsp:
<!-- 第一种方式: 通过 js 实现 -->
<script type="text/javascript">
window.location.href="跳转的jsp路径";
</script>
<!-- 第二种方式: 通过内置对象response重定向实现 -->
<%
response.sendRedirect("跳转的jsp路径");
%>
<!-- 第三种方式: 通过jsp内置标签实现 -->
<jsp:forward page="跳转的jsp路径"></jsp:forward>
jsp 跳 servlet:(同上)
servlet 跳 jps:
// 转发:
request.getRequestDispatcher("跳转的jsp路径").forward(request,response);
// 重定向:
response.sendRedirect("跳转的jsp路径");
servlet 跳 servlet:
request.getRequestDispatcher("跳转的servlet虚拟路径").forward(request,response);
4.base标签: 定位到的是服务器根目录
<%
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +request.getContextPath()+"/";
%>
<head>
<!-- base标签 -->
<base href="<%=basePath %>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>new jsp</title>
</head>
5.MVC 设计模式及三层架构:
M: Model,模型 ==> JavaBean
JavaBean: 实体类满足属性全部使用private修饰,每个属性提供一个get/set方法,并且有一个无参的构造方法
V: View,视图 ==> JSP/html
C: Controller,控制器 ==> Servlet
数据访问层(dao): 完成具体的业务操作,如:查询数据库,封装对象
业务层(Service): 调用dao层方法,校验数据等
控制层(controller): 获取表单数据,跳转页面等