一.jsp语法
1.表达式:是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。
jsp表达式:用于将程序数据输出到客户端,它将要输出的变量或者表达式直接封装以"<%="开头和以"%>"结尾的标记中
<%=expression %>
2.语法
<%
int x = 3;
out.println(x);
%>
3.jsp 的脚本片段
是指嵌套在<% 和 %>之中的一条或多条Java程序代码,需严格遵守Java规范
<% for(int i=0;i<3;i++){%>
<%=i+1 %>(表达式)
<%}%>
4.jsp的声明:在 JSP 页面中 , 可以声明一个或者多个合法的变量和
方法 , 声明后的变量和方法可以在本JSP 页面的任何位置使用 , 并将在 JSP 页面初始化时被初始化
为什么声明:当jsp页面被翻译成servlet程序时jsp中包含的,脚本片段,表达式,模板元素都将转换成servlet中的_jspService()方法的程序代码,它们都将成为_jspService()方法的局部变量,脚本片段中定义的方法,会出现方法中定义方法,这样的语法是错误的。
声明方式:<%! %>
<%!
java a代码
%>
此时jsp中定义的都是成员方法,变量....
5.注释:<%-- --%>
6.jsp指令
page指令:对页面的某些特性进行描述
格式:<%@page 属性名="属性值" %>
page属性的常用指令
1.language 指明采用的语言
2.extends 继承那个类
3.session 是否内置session对象(true,false)
4.autoFlush 指明是否运行缓存
5.buffer 指定缓存大小autoFlush 设为true时有效(none,数字+KB)
6.errorPage 指定一个错误页面
7.contentType 根据属性判断文档类型
8.import 导入的包或类
注意:在这些常见属性中除了import外其他属性只能出现一次,否则编译会失败
7.errorPage属性指定错误页面
指定页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="error.jsp"%>
Insert title here
<%
int a=1/0;//编译期间会报错 错误原因 java.lang.ArithmeticException: / by zero
%>
处理页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
异常正在处理....
8.web.xml文件配置通用的错误页面
404
/404.jsp
9.include指令:静态包含一个文件
<%@include file="relativeURL" %>
- <%@ taglib ... %> 引入标签库的定义,可以是自定义标签
11.jsp隐式对象(因为这些对象需频繁使用每次创建对象很麻烦,所以jsp提供了9个隐式对象,可以直接拿来用)
对象名称 | 类型 | 描述 |
---|---|---|
out | javax.servlet.jsp.JspWriter | 用于页面输出 |
request | javax.servlet.http.HttpServletRequest | 得到用户请求 |
response | javax.servlet.http.HttpServletResponse | 响应请求信息 |
config | javax.servlet.ServletConfig | 服务器配置 |
session | javax.servlet.http.HttpSession | 用来保存用户信息 |
application | javax.servlet.ServletContext | 所有用户共享信息 |
page | java.lang.Object | 指当前页面转换后的Servlet类的实例 |
pageContext | javax.servlet.jsp.PageContext | jsp的页面容器 |
exception | Java.lang.Throwable | jsp页面发生异常错误页面中才起作用 |
out对象
Servlet引擎<----pesponse缓冲区<-----JspWriter对象的缓冲区<----调用out隐式对象
可以看出out隐式对象直接调用的 没有response.getWriter的"快"
只有调用了ServletResponse.getWriter()方法缓冲区的数据才能写入到servlet引擎所提供的的缓冲区中
希望out对象可以直接写入Servlet引擎提供的缓冲区,这是可以通过page指令中的buffer属性来实现(buffer=0KB)
pageContext对象:可以用它获取JSP的隐式对象如:
HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
还提供了存储数据功能
setAttribute(String name ,Object value,int scope)
getAttribute(String name ,int scope)scope可以不写
范围如下
pageContext.PAGE_SCOPE
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE
12.jsp标签
语法:
or
注:
1、page="path" 为相对路径,或者代表相对路径的表达式。
2、flush="true" 必须使用flush为true,它默认值是false。
3、
语法:
or
……
注:
1、page="path" 为一个表达式,或者一个字符串。
2、
文件,参数可以是一个或多个值,而这个文件却必须是动态文件。要传递多个参
数,则可以在一个 JSP文件中使用多个
文件中。
13.静态包含和动态包含
动态包含:
静态包含:<%@include file="地址(xxx.jsp)"%>
包含的页面是父页面的子页面作为父页面的一部分来调用会共享父页面的变量
路径会有重复需删除子页面的路径
14.四大域对象
实际开发中:存放数据的。
PageContext:页面范围。最小。开发中很少用。演示代码。
ServletRequest:请求范围。不同的资源,只有用转发。
HttpSession:会话范围。多次请求共享数据,但不同的客户端不能共享。
ServletContext:应用范围。最大。尽量少用。用时要做同步处理。
15.JSP开发的最佳实践
Servlet:擅长写Java代码逻辑,不擅长输出html的内容。
开发中作为:控制器。
JSP:不擅长写Java代码逻辑,擅长显示结果。
开发中作为:视图(显示结果)
16.JavaBean的概念
1、JavaBean又称之为POJO(Plain Old Java Object)、VO(Value Object)、DO(Data Object)
2、JavaBean的书写规范
a、必须是public的
b、提供默认的构造方法
c、字段都是私有的: private String username;
d、提供公有的getter或setter方法:属性。
getUsername():读属性,属性名:username.
setUsername(String username):写属性,属性名:username。
e、一般需要实现java.io.Serializable接口。
结论:JavaBean在JavaEE开发中,主要担当封装数据用的。
17.JSP中使用JavaBean:导入JavaBean:用page指令的import
18.总结:
JSP+JavaBean,开发模型,Model1(模型1)
Servlet+JSP+JavaBean,开发模型,Model2(模型2)
Mvc:Model-view-controller
1.model--->javabean要求表单数属性名,bean中属性名和字段名要统一
2.view--->jsp即视图
3.Controller--->servlet即控制器
4.model一般的命名规范:entity,model,pojo,dto