JSP
JSP
JSP概念
jsp是一个特殊的页面,其中既可以指定定义html标签,编写无逻辑的html代码,也可以通过特殊符号<%java代码%>编写有逻辑的java代码。实际上,如果只是html静态资源+Servlet动态资源的项目,当我们请求动态资源之后,页面跳转到动态资源对应页面,这时候如果想让动态资源对应页面美观,就还要通过response.getWrite().write(String str)方法来进行很多html格式的页面设置,编写复杂也不便于阅读和修改,所以jsp作为一种动态资源格式很好的解决了这个问题。
JSP在本质上就是一个Servlet,jsp文件编译后的字节码文件内部结构其实就是一个Servlet类。
JSP使用方法
- <% 代码 %>:该符号中编写的java代码,相当于在Servlet类中service方法的方法体。同一个jsp文件中的<% 代码 %>可以被截断,分别放在几个不同的位置,最后编译器会把所有代码先放在一起再编译。
- <%! 代码 %>:该符号中编写的java代码,在jsp转换后的java类的成员位置。
- <%= 代码 %>:该符号中编写的java代码,会输出到页面上。java中sout输出语句的参数可以是什么,该符号中编写的java代码就可以是什么。
- <%–注释内容–%>:注释。
JSP内置对象
在jsp动态资源中有一些java对象不需要获取和创建,可以直接使用:
request
response
out:字符输出流对象,out.write()方法与response.getWriter()的作用相似,都是将字符串参数直接输出到浏览器页面上。
pageContext:pageContext主要用于设定一个当前页面的共享数据,是范围最小的数据共享域
e.g.
1
2
3
4
5
6<%--设置当前页面的共享数据(范围最小的共享域)--%>
<% pageContext.setAttribute("msg","健身 让生活的意义变多!"); %>
<%--JSP中的输出到页面脚本<%= %>可以直接输出中文字符和空格等特殊字符到页面上,
JSP已经帮我们设置好了响应文本到页面上所采用的字符集"text/html;charset=UTF-8"--%>
<%= pageContext.getAttribute("msg") %>session
application:其实就是ServletContext对象,主要用于操作所有用户间共享的数据。
page
config
exception
使用案例
1 | <%@ page import="java.util.Date" %> |
JSP指令
主要通过<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>的格式导入一些资源文件,用来配置JSP页面。常用指令名称有:
page:用于配置JSP页面
- contentType:设置响应体的MIME类型和字符集
- import:用于导入jar包
e.g.
1
2<%@ page import="java.io.PrintWriter" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>include:导入页面的资源文件
e.g.
<%@ include file="top.jsp"%>taglib: 导入资源文件,主要用于导入标签库jar包
e.g.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
MVC开发模式
虽然jsp格式文档简化了Servlet的开发,但是真正把大量java代码和html代码放在同一个jsp文档中,维护较为困难,难以分工协作,所以后来java的web开发,借鉴了mvc开发模式,使得程序的设计更加合理。
- M:Model,主要通过javabean类型的Java类来实现,定义一些具体的业务操作,比如查询数据库、封装对象。
- V:View,主要通过JSP文档来实现,主要用于展示动态资源中需要在浏览器页面中展示的数据,并通过html代码进行页面的美化。在mvc模式中,jsp文档主要设置展示数据时的页面,所以尽量不要写具有逻辑性的java代码。
- C:Controller,主要通过Servlet类来实现,定义一些逻辑性的操作,在模型和视图之间起到过度作用。
EL表达式
概念语法
EL表达式的作用主要是用于jsp页面中,用来替换jsp中的<%= java代码 %>符号,替换成&{EL表达式},也就是说java中sout语句的参数可以是什么类型的数据,EL表达式就可以是什么类型的数据,只不过一些对象的写法可能会有不同。jsp默认支持el表达式,不需要额外引入jar包。
主要作用
el表达式主要用于通过web项目的一些域对象来获取这些域中的共享数据,并将这些数据在页面上展示出来,写法有:
${域对象名称.键名}:获取键名对应的值。比如${request.name}就相当于<%= request.getAttribute(“name”) %>${域名称.键名.属性名}:获取键名对应的封装类实例对象的一个属性的值。${域名称.键名[索引]}:获取键名对应的List集合中索引对应的元素。${域名称.键名.key名称}/${域名称.键名["key名称"]}:获取键名对应的Map集合中key名对应的值。
常用的域对象名称有:
- pageScope:表示Servlet中的pageContext对象
- requestScope:表示Servlet中的request对象
- sessionScope:表示Servlet中的session对象
- applicationScope:表示Servlet中的ServletContext对象
e.g. ${pageContext.request.contextPath}可以动态获取当前动态资源的虚拟目录。
使用案例
javabean类案例
1 | /** |
EL表达式使用案例
1 | <html> |
JSTL
概念用法
- JSTL是指JSP标准标签库,是一些额外的jsp标签。
- 先导入jstl相关jar包,然后再jsp文档中引入该标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>即可使用。 - jstl标签的主要作用就是直接通过标签实现一些逻辑操作。虽然直接再jsp文档中通过
<% %>脚本也可以编写带有逻辑操作的java代码,但是el表达式并不能写入java代码中。但是el表达式是可以直接写入jstl标签内的,所以jstl标签常用于与el表达式搭配,达到逻辑性显示共享域中数据的效果。
常用JSTL标签
if:相当于java代码中的if语句
test为该标签的必须属性,该属性的属性值为boolean表达式,如果该表达式为true,则jsp页面上会显示if标签体内容,如果为false,则不显示标签体内容。
choose:相当于java代码中的switch语句
- choose标签相当于java中的switch声明
- when标签相当于java中的case语句
- otherwise标签相当于java中的default语句
foreach:详单与java代码中的for语句,也是最常用的jstl标签
e.g.
1
2
3
4
5
6
7
8
9
10
11
12
13<%--jstl最大的作用就是可以和html语句、el表达式配合嵌套使用--%>
<%--foreach的属性属性:items(容器对象),var(容器中元素的临时变量),varStatus(循环状态元素)--%>
<c:forEach items="${list}" var="user" varStatus="s">
<tr bgcolor="red">
<%--varStatus的属性:index(容器中元素的索引,从0开始),count(循环次数,从1开始)--%>
<td>${s.count}</td>
<%--var的属性即为list中的javabean对象中的getter方法所返回的值--%>
<td>${user.strdate}</td>
</tr>
</c:forEach>
软件设计三层架构
- 界面层:用户在浏览器上看见的界面,用户可以通过界面上的组件和服务器进行交互
- 业务逻辑层:处理业务逻辑
- 数据访问层:操作数据存储文件
