jsp介绍
JSP(全称 Java Server Pages)Java 服务端页面技术 ,它允许使用特定标签在HTML网页中插入Java代码
为什么需要jsp
Servlet输出HTML⾮常困难,JSP就是替代Servlet输出 HTML的
创建jsp项目
1、create project->web Application
2、Project Settings->Libraries-> + 导入servlet-api.jar包
JSP使用
JSP三种原始标签
<%! %>声明标签:定义成员变量与方法
<% %>脚本标签:编写业务逻辑
<%= %>赋值标签:做内容输出。注:赋值时不需要在代码中添加“;”
注:标签之间不能嵌套
JSP原始标签使用案例
//需求:以 20%概率显示你中奖了。<html><head><title>Title</title></head><body><%int flag = new Random().nextInt(100);if(flag<=20){%>恭喜你,中奖了!<%= flag%><%}else {%>谢谢惠顾!<%}%></body></html>
JSP指令标签
//作用:声明JSP页面的一些属性和动作<%@指令名称 属性="值" 属性="值"%>//JSP指令标签分类-page:主要声明 JSP 页面的一些属性-contentType:设置相应类型和编码-pageEncoding:设置页面的编码-session:设置jsp页面是否获取session内置对象-include:静态包含-可以将其他页面内容包含进来,一起进行编译运行.生成一个 java 文件.-<%@include file="被包含 JSP 的相对路径" %>-taglib:导入标签库-<%@taglib prefix="前缀名" uri="名称空间" %>
JSP内置对象(面试会问)
1、request 对象是 HttpServletRequest 类型的对象。2、response 对象是 HttpServletResponse 类型的对象。3、session 对象是 HttpSession 类型的对象。只有在包含 session=“true” 的页面中才可以被使用。4、application 对象是 ServletContext 类型的对象5、out 对象是 JspWriter 类型的对象。6、config 对象是 ServletConfig 类型的对象。7、pageContext 对象是 PageContext 类型的对象。作用是取得任何范围的参数,通过它可以获取 JSP 页面的 out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在 JSP 页面中可以直接使用 pageContext 对象。8、page 对象代表 JSP 本身。9、exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用
请求转发
//请求转发:服务端的一种请求方式,在服务端中直接请求某个资源request.getRequestDispatcher("/test.jsp").forword(request,response);//英文翻译-dispatcher:调度器,分配器,-forword:向前
请求转发和重定向区别
| 请求转发 | 重定向 | |
|---|---|---|
| 又称 | 服务端跳转 | 客户端跳转 |
| 请求和响应次数 | 对于客户端而言,在一次请求和响应中完成(直接在服务端中资源访问) | 两次请求和响应中完成 (服务端给客户端产生响应,在响应当中添加头中添加了一个location的key,location后面给定的是个地址;客户端根据这个头信息再次发送url请求,然后响应回来) |
| 是否改变客户端浏览器地址栏中的内容 | 不改变 | 改变 |
| 是否使用request对象传递数据 | 通过forward(request,response)传递 | 不使用request对象传递数据 |
| 对于DML操作(添加,修改等) (核心问题:客户端浏览器地址栏不会改变,刷新就会导致表单重复提交) |
(对于查询操作)使用请求转发,查询涉及数据传递问题 | (对于DML操作)使用重定向方式客户端浏览器产生响应 |
请求转发案例
servlet代码
/*** 需求:在 Servlet 中获取客户端浏览器所支持的语言,并通过 JSP 页面将客户端浏览器* 所支持的语言响应给客户端浏览器。*/@WebServlet("/language.do")public class LanguageServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求头String header = req.getHeader("Accept-Language");//设置属性 以 传给对应的jspreq.setAttribute("key",header);//请求转发(在服务端将资源从servlet发送到jsp中)req.getRequestDispatcher("/showmsg.jsp").forward(req,resp);}}
jsp代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%String key = (String)request.getAttribute("key");%>支持的语言为:<%= key%></body></html>
jsp四大作用域对象
作用域:”数据的共享范围”,也就是数据在多大范围有效
| 对象名称 | 作用范围 |
|---|---|
| application | 整个应用都有效 |
| session | 当前会话有效 |
| request | 当前请求有效(存放业务数据) |
| page | 当前页面有效 |
JSTL标签库
JSTL(Java server pages standarded tag library,即 JSP 标准标签库),这些标签封装了不同的功能。 JSTL 的目标是 使 JSP 页面的可读性更强、简化 JSP 页面的设计、实现了代码复用、提高效率。
JSTL分类
在使用 JSTL 标签库时需要在 JSP 中添加对应的 taglib 指令标签。<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
核心标签( 最常用、最重要,也是最基本的标签 )
格式化标签
SQL标签
XML标签
JSTL函数
JSTL标签库使用步骤
//1、添加 jstl.jar 与 standard.jar。选中项目->Project Structure->Libraries->"+",选择java导入jar包->Apply->(重要)Artifacts栏右侧Available Elements下面右键put into//2、在 Idea 中添加 JSTL 标签的约束文件(DTD)。File->Settings...->Languages&Frameworks->Schemas and DTDs->"+",URI:http://java.sun.com/jsp/jstl/core,File:D:\Java\sxt课件\jsp\软件\jakarta-taglibs-standard-1.1.2\tld\c.tld//3、在 JSP 页面中添加 taglib 指令标签。选中web目录,新建jsp文件->添加指令标签<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
JSTL核心标签使用
//1、-<c:if>-标签判断表达式的值,如果表达式的值为 true 则执行其主体内容,(注意)当双引号内容为表达式时需使用*EL表达式*-eg:<c:if test="${1==1}">执行了</c:if>//2、-<c:choose>, <c:when>, <c:otherwise>-<c:choose>标签与 Java switch 语句的功能一样,用于在众多选项中做出选择。-switch case defaul对应<c:choose> <c:when> <c:otherwise>-eg:<c:choose><c:when test="${2==1}">when1执行了</c:when><c:when test="${1==3}">when2执行了</c:when><c:otherwise>otherwise执行了</c:otherwise></c:choose>//3、-<c:forEach>-迭代器,用于迭代集合-需求:创建 Users 对象,含有 userid,username 属性。创建一个 Servlet,在 Servlet 中创建多个 Users 对象并放到 Map 集合中,在 showUsers2.jsp的页面中显示所有的 Users 对象的信-eg:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html><head><title>Title</title></head><body><table border="1" align="center"><tr><th>map_key</th><th>用户ID</th><th>用户名</th></tr><c:forEach items="${requestScope.key}" var="map"><tr><td>${map.key}</td><td>${map.value.userid}</td><td>${map.value.username}</td></tr></c:forEach></table></body></html>
JSTL 格式化标签的使用
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>//对日期的格式化处理<fmt:formatDate value="${requestScope.data}" pattern="yyyy-MM-dd"/>//对数字格的式化处理<fmt:formatNumber value="${requestScope.num}" type="currency"/>
