一、初识JSP
1.1简介
JSP(Java Server Pages),其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签。JSP是一种动态网页技术标准,也是JavaEE的标准。JSP和Servlet一样,是在服务器端执行的。JSP是在Servlet技术发展之后为了让开发者写html标签更方便而发展起来的技术,JSP实际上就是Servlet。
人们通常把Servlet作为Web应用中的控制组件来使用,只负责响应请求产生数据,并把数据通过转发技术带给jsp,而把jsp技术作为数据显示模板来使用。这样使程序结构更清晰,可读性和可维护性更高。
1.2 基础语法与指令
声明脚本(极少使用)
声明格式:<%! java代码 %>
作用:可以给翻译出来的java类定义属性和方法甚至是静态代码块,内部类等
1.声明类属性
<%! private Integer id; private String name; private static Map<String,Object> map; %>
2.声明static静态代码块
<%! static { map = new HashMap<String,Object>(); map.put("key1","猫"); map.put("key2","狗"); map.put("key3","羊"); map.put("key4","牛"); } %>
3.声明类方法
<%! public int test(){ return 12; } %>
4.声明内部类
<%! public static class A{ private int id = 1; private String name = "aaa"; } %>
表达式脚本(常用)
表达式脚本格式:<%=表达式%>
表达式脚本的作用是:在jsp页面上输出数据
1.输出整型
<%=12%>
2.输出浮点数
<%=12.12%>
3.输出字符串
<%="我是字符串"%>
4.输出对象
<%=map%>
表达式脚本的特点: 1. 使用的表达式脚本都会被翻译到jsp源文件的_jspService()方法中去
2. 表达式脚本都会被翻译为out.print()输出到页面上
3. 由于所有的表达式脚本翻译的内容都在_jspService()中,所以__jspService()方法中的对象可以直接使用
4. 表达式脚本中的表达式不能以分号结束
代码脚本
代码脚本格式:<%java语句%>
代码脚本的作用:可以在jsp页面中编写我们自己需要的功能(java语句)
1.代码脚本—-if语句
<% int i=12; if(i==12) System.out.println("哈哈哈"); else System.out.println("呵呵呵"); %>
2.代码脚本—-for循环语句
<% for(int j = 0;j<10;j++) System.out.print(j); %>
3.翻译后java文件中_jspService方法内的代码都可以写
<% String name = request.getParameter("name"); System.out.println("请求的参数为:"+name); %>
代码脚本的特点: 1. 代码脚本翻译到了源文件的_jspService()方法中
2. 由于代码脚本翻译的内容都在_jspService()中,所以__jspService()方法中的现有对象可以直接使用
3. 代码脚本还可以由多个代码脚本块组合完成一个完整的Java语句
4. 代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据
1.3 jsp中的三种注释
-
html注释 <!--这是html注释--> 会被翻译到java源代码中,以out.writer输出到客户端
-
java注释 java注释会被翻译到java源代码中\
<% //单行注释 /*多行注释*/ %>
-
jsp注释 <%—这是jsp注释—%> jsp注释可以注释掉jsp页面中所有代码
1.4错误界面(重要)
1.5JSP指令(网页结构)
二、JSP入门
2.1JSP九大内置对象
jsp中的内置对象,是指Tomcat在翻译jsp页面成为servlet源代码后,内部提供的九大对象,叫内置对象
- request 请求对象
- response 响应对象
- pageContext jsp的上下文对象
- session 回话对象
- application ServletContext对象
- config ServletConfig对象
- out jsp输出流对象
- page 指向当前jsp的对象
- exception 异常对象(需要开启isErrorPage属性)
2.2四大域对象
jsp的四大域对象(可以像map一样存取数据的对象)
- pageContext(PageContextImpl类) 当前jsp页面范围内有效
- request(HttpServletRequest类) 一次请求内有效
- session(HttpSession类) 一次会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)
- application(ServletContext类) 整个web工程范围内都有效(只要web工程不停止,数据都在)
四个域使用的优先顺序是:
pageContext ===> request ===> session ===> application
2.3 jsp中out输出和response.getWriter输出的区别
response中表示响应,我们经常用于设置返回给客户端的内容
out也是给用户做输出使用
当jsp页面中所有代码执行完成后会做以下操作:
- 执行out.flush()的操作,会把out缓冲区中的数据追加写入到response缓冲区末尾
- 执行response的刷新操作,把全部数据写给客户端
由于jsp翻译之后,底层源代码都是使用out来输出,使用一般情况下我们统一使用out来进行输出,避免打乱页面输出的顺序
out.write()输出字符串没有问题,输出整型有问题
out.print()输出任意数据没有问题(都转换为字符串后调用write输出)
在jsp页面中,可以统一使用print()进行输出
2.4JSP标签、JSTL标签、EL表达式
2.4.1EL表达式
EL表达式全称为:Expression Language,即表达式语言。
EL表达式作用为:主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出,相比原生的jsp可读性更高,更简洁。
EL表达式:${ }
●获取数据
●执行运算
●获取web开发的常用对象
2.4.2JSP标签
<%--<jsp:include>--%>
<!-- jsp携带数据 -->
<jsp:forward page="/jsptag2.jsp">
<jsp:param name="name1" value="1"/>
<jsp:param name="name2" value="2"/>
</jsp:forward>
取出值
<%= request.getParameter("name1")%>
<%= request.getParameter("name2")%>
核心标签(掌握部分)
格式化标签
SQL标签
XML标签
JSTL常用标签
<c:if>
c:set
作用:存值,存值到scope中
<c:choose>, <c:when>, <c:otherwise> 标签用于在众多选项中做出选择,与switch功能相同
<c:forEach>标签
迭代遍历元素,整合for/foreach等 Items,集合数组等对象,必为通过EL获取的集合对象 Var,每次迭代的元素对象 varStatus,迭代状态变量
<c:out>
<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
1、 value 要输出的信息
2、 default 默认情况下输出什么
3、 escapeXml 是否以xml格式输出注:默认为true,即像”<”,”>”这样的符号会原样输出
varStatus属性,封装遍历状态的属性变量名称
2.5JAVABean
JAVABean是一种用Java语言编写的可重用组件,它遵循一些规范,如有无参数的构造器,有set和get方法的属性,有事件监听器的事件等。JAVABean可以被其他Java应用程序调用,也可以被可视化的开发工具操作。JAVABean有可视化和不可视化两种类型,分别用于提供图形用户界面和处理业务逻辑等
实体类
JavaBean有特定的写法:
- 必须要有一个无参构造
- 属性必须私有化
- 必须有对应的get/set方法:
一般用来和数据库的字段做映射 ORM;
ORM:对象关系映射
- 表 —> 类
- 字段 —> 属性
- 行记录 —> 对象
id | name | age | address |
---|---|---|---|
1 | oi1号 | 18 | 温泉1 |
2 | oi2号 | 19 | 温泉2 |
3 | oi3号 | 20 | 温泉3 |
class people{
private int id;
private String name;
private int age;
private String address;
}
class A{
new People(1,"oi1号",18,"温泉")
}
2.6MVC三层架构
Model View Controller 模型、视图、控制器
Model
- 业务处理:业务逻辑(Service)
- 数据持久层:CRUD (Dao)
View
- 展示数据
- 提供链接发起Servlet请求(a,form,img…)
Controller(Servlet)
- 接受用户的请求:(req:请求参数、Session信息…)
- 交给业务层处理对应的代码
- 控制视图的跳转