JSP与Servlet 程序设计教程
概述
动态网页技术与JSP优势
JSP中调用java代码
JSP三种基本动态技术元素:表达式、声明、脚本
表达式
目的是将一些动态的信息显示到页面的最终输出结果中
语法: <%= 变量或表达式 %>
声明
用于定义变量、方法、类、静态初始块(通常只在声明部分定义变量及方法)
语法:<% ! 变量定义或方法定义 %>
脚本
JSP动态生成网页的核心部分,可以利用java语言的三大结构生成不同的页面元素
语法:<% 脚本内容 %>
注释
语法:<% – 注释信息 – %>
JSP指令
page指令
可以控制类的导入、内容类型等设置,通常放置在JSP的开始位置
语法:<%@ page 属性名1=“属性值1” […属性名n=“属性值n”] %>
- import属性 <%@ page import=“类的相对路径” %>
- contentType与pageEncoding 标明发送到客户程序的文档MIME类型 <%@ page contentType=“text/html;charset=UTF-8” %> (两者配合使用) 单独设置字符集的话 <%@ page pageEncoding =“字符集” %>
- language 指定页面使用的脚本语言 默认是java
- errorPage 本页面加载错误时跳转的哪一个界面
- isErrorPage 表明为错误显示界面
- isELIgnored 是否解析JSP语言表达式
- 其他:session、buffer等
include指令
将属性file所指向的文件包含到当前JSP页面中(一般用于相同的头或者页脚显示,减少代码量)
语法:<%@ include=“被包含的文件名(jsp页面)” %>
JSP动作
JSP动作通常是在向JSP页面发送请求时才会执行的操作,也就是说它是在页面请求期间执行的,这也是JSP动作与JSP行为的本质区别
jsp:include动作
jsp:include动作与include指令类似 不同是他可以传递参数
语法:< jsp:include page=“被包含的文件路径(绝对或相对)”/ > 或
< jsp:include page=“被包含的文件路径(绝对或相对)”>
…
< jsp:param name=“参数名” value=“参数值” / >
…
< / jsp:include >
不同:
jsp:forward动作
作用是转发请求,如果用户请求中包含提交的数据,数据也将一块被转发(只能转发到站内文件)
语法:语法:< jsp:forward page=“转发目标页面”/ > 或
< jsp:forward page=“转发目标页面”>
…
< jsp:param name=“参数名” value=“参数值” / >
…
< / jsp:forward >
jsp:plugin动作
在网页中嵌入applet(基本上已经弃用)或javaBean
语法:< jsp:plugin code=“插件实现最顶级类文件” codebase=“插件类根目录”
type=“插件类型” width=“宽度” height=“高度” />
< jsp:fallback>替换文字< / jsp:fallback>
< / jsp:plugin>
JSP隐含对象
request
一个请求对象,它包含了用户发起请求所包含的所有应用数据。
常用方法:
- 取得/设置指定参数——request.getParameter()/setAttribute()
- 取得指定数组参数——getParameterValues()
- 取得URL参数字符串——getQueryString()
- 取得指定名称——getParameterNames()
- 请求参数中文处理——request.setCharacterEncoding(“UTF-8”)
- 取得session——request.getSession();
- 取得请求头部信息
- 取得客户和主机信息
response
代表请求的相应对象。
常用方法:
- 设置Content-Type——response.setContentType(“text/html;charset=utf-8”);
- 发送错误相应至客户端
- 重定向——response.sendRedirect();
当使用Redirect跳转Servlet时,跳转实在客户端实现的,也就是说客户端浏览器实际上请求了2次服务器,第1次获取了重定向状态码与重定向的网址,第2次访问真实地址。
session
保存当前会话信息
常用方法:
- 取得/设置指定参数——session.getAttribute()/setAttribute()
out
out对象向相应中输出指定信息
- 输出信息——out.print()
java Bean在JSP中应用
语法:头部添加标签
< jsp:useBean id=“引用名称” scope=“session|request|page|application”
class=“完整类名”|beanNane=“Bean名称”|type=“对象类型” />
获取和设置属性
< jsp:setProperty name=“Java Bean实例名(上面的id)” property=“属性名” value=“待设值”|param=“参数名称” />
< jsp:getProperty name=“Java Bean实例名(上面的id)” property=“属性名” />
Servlet基础
servlet功用
- 读取客户端发送的显示数据或者对客户端发送的数据进行预处理
- 读取客户端发送的隐含数据
- 生成结果
- 向客户发送显示数据
- 发送隐含的相应数据
servlet生成html
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.print( JSONObject.toJSONString( result ) );//打印一行数据到当前请求界面
writer.flush();
writer.close();
Servlet处理客户请求
读取客户请求参数
与JSP操作request一致
可以操作session
HttpSession session = request.getSession();
session.setAttribute("user", user);
session.getAttribute("user");
跳转:
(1) 转发:
//request可以添加参数
request.getRequestDispatcher("路径").forward(request,response);
(2)重定向
response.sendRedirect("路径");
(3)直接输出返回到ajax中(注意使用ajax请求的才可以,然后由ajax进行界面跳转)
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.print( JSONObject.toJSONString( result ) );//返回json格式字符串
writer.flush();
writer.close();
模型-视图-控制框架
JSP表达式语言 EL
JSP内置了EL表达式
能够以更简洁的方式显示结果,表达式语言可以访问请求或者其他作用域中的对象
功能:
- 访问存储在不同作用域的中的对象
- 方便的访问java Bean的属性
- 简单的访问集合元素
- 可以方便访问请求等隐式数据
- 支持简单的运算符操作
- 无需类型转换
- 以空值取代异常
语法:
${ 表达式 }
访问变量
访问java Bean的属性
首先在servlet中
request.setAttribute("user",user);
在jsp中
${ user.userName }/${ user[userName] }
访问不同作用域中的属性
当变量名一样时 request>session>application
访问集合中的变量
${ userList[0].userName }/${ userList[0][userName] }
JSTL
OGNL是Object Graphic Navigation Language(对象图导航语言)
然后在jsp中引入
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
EL与JSTL配合使用案例:
<tbody>
<c:forEach items="${reports}" var="report">
<tr>
<td>${report.id}</td>
<td>${report.createAt}</td>
<td>${report.title}</td>
<td>${report.userId}</td>
<td>${report.type}</td>
<td>${report.states}</td>
<td>${report.summary}</td>
<%--<td><%= report.getUrl()%></td>--%>
<td><a href="${report.url}">下载</a></td>
</tr>
</c:forEach>
</tbody>