目录
如Tomcat的安装和启动,请前往前边篇博客《实训二——chapter05项目》中查看。
本项目(chapter07)不需要手动导入(servlet-api.jar)这个jar包。该项目中可以通过目录或者项目结构的库,看到已经存在。如下图显示。
本项目还需要自己导入对应的jsp-api.jar包。否则后面会出现问题!!具体如何操作,请看上篇文章。
四、回到IDEA之前打开的项目,修改和补充各个目录下对应的代码。
在src目录下,找到cn.itcast.servlet目录下——>找到MyServlet.java。按照书本P140添加补充即可。
在web目录下——>找到myjsp.jsp。按照书本P140(文件7-3)添加补充即可。
在web目录下——>找到pageContext.jsp。按照书本P145~P146添加补充即可。
在web目录下——>找到scopes.jsp。按照书本P146添加补充即可。
在web目录下——>找到param.jsp。按照书本P147添加补充即可。
在web目录下——>找到initParam.jsp。按照书本P148添加补充即可。web.xml文件不需要修改,项目中已经提供。
在web目录下——>找到test.jsp。按照书本P151添加补充即可。如下载和导入JSTL的jar包、配置项目中已经完成。
在web目录下——>找到c_out1.jsp。按照书本P152添加补充即可。
在web目录下——>找到c_out2.jsp。按照书本P152~P153添加补充即可。
在web目录下——>找到c_if.jsp。按照书本P154添加补充即可。
在web目录下——>找到c_choose.jsp。按照书本P155添加补充即可。
在web目录下——>找到c_foreach1.jsp。按照书本P156~P157添加补充即可。
在web目录下——>找到c_foreach2.jsp。按照书本P157添加补充即可。
在web目录下——>找到c_url.jsp。按照书本P158~P159添加补充即可。
在web目录下——>找到if.jsp。按照书本P159~P160添加补充即可。
(1)访问浏览器地址:"http://localhost:8080/chapter06/MyServlet"
(2)访问浏览器地址:"http://localhost:8080/chapter06/pageContext.jsp"
(3)访问浏览器地址:"http://localhost:8080/chapter06/scopes.jsp"
(4)访问浏览器地址:"http://localhost:8080/chapter06/param.jsp"
(6)访问浏览器地址:"http://localhost:8080/chapter06/initParam.jsp"
(7)访问浏览器地址:"http://localhost:8080/chapter06/test.jsp"
(8)访问浏览器地址:"http://localhost:8080/chapter06/c_out1.jsp"。再一次输入地址,不过后面加上一个参数?username=itcast。
(9)访问浏览器地址:"http://localhost:8080/chapter06/c_out2.jsp"。
(10)访问浏览器地址:"http://localhost:8080/chapter06/c_if.jsp"。
(11)访问浏览器地址:"http://localhost:8080/chapter06/c_choose.jsp"。
(12)访问浏览器地址:"http://localhost:8080/chapter06/c_foreach1.jsp"。
(13)访问浏览器地址:"http://localhost:8080/chapter06/c_foreach2.jsp"。
(14)访问浏览器地址:"http://localhost:8080/chapter06/c_url.jsp"。点击页面中两个其中一个超链接,跳转到c_out1.jsp页面。
(使用IDEA旗舰版(2024)完成)
一、IDEA中打开实训所需项目(chapter07)。
(1)学习通下载部分源代码(需修改)
(第七章——>拿到项目"chapter07")
(2)在IDEA中打开该项目(选择chapter07目录)
(3)点击信任项目(chapter07),即可打开
(4)整体的项目(chapter07)结构
二、初步了解本章需要学习的东西。(会的可跳过)
- JSP开发中,为了获取Servlet域对象中的存储数据。会需要书写很多Java代码,这样使jsp页面混乱。为了降低jsp页面的复杂度,增强代码重用性,推出了标准的标签库JSTL。同时,为了获取servlet域对象中的存储数据,还提供了El(表达式语言),降低了开发的难度。
- El(表达式语言)是JSP引入的新内容,可以简化开发中的对象引用,规范页面代码,增加程序可读性和可维护性。
- EL语法很简单——>以"${"开始,"$"结束。
- 想要在网页上显示字符串"${",要在其前面+"\"。
- EL的标识符规则(不能以数字开头、不能是关键字、不能是EL隐式对象(pageContext)、不能包含引号等等特殊字符)
- EL关键字认识、EL中的变量(${变量})、EL中的常量、EL中的算术符("+"号与Java区分)、EL比较运算符、逻辑运算符、EL的empty运算符、EL的条件运算符(${A?B:C})、EL的"()"运算符
- EL隐式对象。有11个,类似于JSP的内置对象,可以直接通过对象名进行各种操作。如pageContext对象。详细自己看书了解。
- EL提供了4个用于访问作用域的隐式对象。(pageScope、requestScope、sessionScope、applicationScope)这四个隐式对象只能获取指定范围内的属性值。
- JSP页面中经常要获取客户端传递的请求参数。两个隐式对象(param、paramValues)两个。使用方法("."后面跟的是name属性值)【${param.num}】、【${paramValues.nums[0]} :数组】。
- EL提供了获取客户端的Cookie信息的隐式对象——>该对象是一个集合了所有Cookie信息的Map集合,Map集合中元素的键为各个Cookie的名称,值对应的Cookie对象。
- EL中initParam对象用于获取Web应用初始化参数的值。
- JSTL。是开放源代码的JSP标签库。JSTL包含5类标签库——>核心标签库(taglib)(表达式标签、URL标签、流程控制标签)、格式标签库(JSP本地信息、设置JSP页面时区)、使用SQL标签库(包含用于访问和操作数据库的标签)、使用XML标签库(对XML文档的数据进行操作)、函数标签库(字符串操作,提取字串、字符串长度获取)
- Core标签库。JSTL核心标签库中常用的两个表达式标签:<c:out>(向页面输出一段文本信息)、<c:remove>(移除指定的JSP范围内的对象)。只有当value的值为null时,<c:out>输出的值才会为默认值,否则是输出空字符串。
- <c:out>标签中不设置escapeXml属性,则属性的默认值为true。即自动进行HTML编码转换。
- 流程控制标签。<c:if>、<c:choose>、<c:when>、<c:otherwise>。具体看书了解P154~P155。其中嵌套语法——><c:choose>里包含一个或多个<c:when>,零个或一个<c:otherwise>,<c:when>标签都不成立时,才执行和输出<c:otherwise>标签体里的内容。
- 循环标签。专门迭代集合对象中的元素(Set、List、Map、数组等)。<e:forEach>标签。
- URL相关标签。Core标签库提供了相应的标签。其中标签<c:param>(获取URL的附加参数)、<c:redirect>(用于按特定的规则重新构造URL)、<c:url>(负责重定向)。
三、配置实训项目(chapter07)的所需环境。
如Tomcat的安装和启动,请前往前边篇博客《实训二——chapter05项目》中查看。
本项目(chapter07)不需要手动导入(servlet-api.jar)这个jar包。该项目中可以通过目录或者项目结构的库,看到已经存在。如下图显示。
本项目还需要自己导入对应的jsp-api.jar包。否则后面会出现问题!!具体如何操作,请看上篇文章。
四、回到IDEA之前打开的项目,修改和补充各个目录下对应的代码。
在src目录下,找到cn.itcast.servlet目录下——>找到MyServlet.java。按照书本P140添加补充即可。
package cn.itcast.servlet; import java.io.*; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; @WebServlet(name = "MyServlet",urlPatterns="/MyServlet") public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("username","itcast"); request.setAttribute("password","123"); RequestDispatcher dispatcher = request.getRequestDispatcher("/myjsp.jsp"); dispatcher.forward(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
在web目录下——>找到myjsp.jsp。按照书本P140(文件7-3)添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8" %> <html> <head></head> <body> 用户名:<%=request.getAttribute("username")%><br/> 密 码:<%=request.getAttribute("password")%><br/> <hr/> 使用EL:<br/> 用户名:${username}<br /> 密码:${password}<br /> </body> </html>
在web目录下——>找到pageContext.jsp。按照书本P145~P146添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8"%> <html> <head></head> <body> 请求URI为:${pageContext.request.requestURI} <br /> Content-Type响应头为:${pageContext.response.contentType} <br /> 服务器信息为:${pageContext.servletContext.serverInfo} <br /> Servlet注册名为:${pageContext.servletConfig.servletName} <br /> </body> </html>
在web目录下——>找到scopes.jsp。按照书本P146添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8"%> <html> <head></head> <body> <% pageContext.setAttribute("userName","itcast"); %> <% request.setAttribute("bookName", "Java Web"); %> <% session.setAttribute("userName", "atheism"); %> <% application.setAttribute("bookName", "Java 基础"); %> 表达式\${pageScope.userName}的值为:${pageScope.userName} <br /> 表达式\${requestScope.bookName}的值为:${requestScope.bookName} <br /> 表达式\${sessionScope.userName}的值为:${sessionScope.userName} <br /> 表达式\${applicationScope.bookName}的值为:${applicationScope.bookName} <br /> 表达式\${userName}的值为:${userName} </body> </html>
在web目录下——>找到param.jsp。按照书本P147添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8"%> <html> <head></head> <body style="text-align: center;"> <form action="${pageContext.request.contextPath}/param.jsp"> num1:<input type="text" name="num1"><br /> num2:<input type="text" name="num"><br /> num3:<input type="text" name="num"><br /> <input type="submit" value="提交" /> <input type="submit" value="重置" /><hr /> num1:${param.num1}<br /> num2:${paramValues.num[0]}<br /> num3:${paramValues.num[1]}<br /> </form> </body> </html>
在web目录下——>找到cookie.jsp。按照书本P148添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8"%> <html> <head></head> <body> Cookie对象的信息:<br /> ${cookie.userName}<br /> Cookie对象的名称和值:<br /> ${cookie.userName.name}=${cookie.userName.value} <% response.addCookie(new Cookie("userName","itcast")); %> </body> </html>
在web目录下——>找到initParam.jsp。按照书本P148添加补充即可。web.xml文件不需要修改,项目中已经提供。
<%@ page language="java" contentType="text/html; charset=utf-8"%> <html> <head></head> <body> author的值为:${initParam.author} </body> </html>
在web目录下——>找到test.jsp。按照书本P151添加补充即可。如下载和导入JSTL的jar包、配置项目中已经完成。
<%@ page language="java" contentType="text/html; charset=utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> <body> <c:out value="Hello World!"></c:out> </body> </html>
在web目录下——>找到c_out1.jsp。按照书本P152添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> <body> <%--第1个out标签 --%> userName属性的值为: <c:out value="${param.username}" default="unknown" /><br /> <%--第2个out标签 --%> userName属性的值为: <c:out value="${param.username}"> unknown </c:out> </body> </html>
在web目录下——>找到c_out2.jsp。按照书本P152~P153添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> <body> <c:out value="${param.username}" escapeXml="false"> <meta http-equiv="refresh" content="0;url=http://www.itcast.cn" /> </c:out> </body> </html>
在web目录下——>找到c_if.jsp。按照书本P154添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> <body> <c:set value="1" var="visitCount" property="visitCount" /> <c:if test="${visitCount==1}"> This is your first visit. Welcome to the site! </c:if>> </body> </html>
在web目录下——>找到c_choose.jsp。按照书本P155添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> <body> <c:choose> <c:when test="${empty param.username}"> unKnown user. </c:when> <c:when test="${param.username=='itcast'}"> ${param.username} is manager </c:when> <c:otherwise> ${param.username} is employee </c:otherwise> </c:choose> </body> </html>
在web目录下——>找到c_foreach1.jsp。按照书本P156~P157添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> <body> <% String[] fruits = { "apple", "orange", "grape", "banana" }; %> String数组中的元素: <br /> <c:forEach var="name" items="<%=fruits%>"> ${name}<br /> </c:forEach> <% Map userMap = new HashMap(); userMap.put("Tom", "123"); userMap.put("Lina", "123"); userMap.put("Make", "123"); %> <hr /> HashMap集合中的元素: <br /> <c:forEach var="entry" items="<%=userMap%>"> ${entry.key} ${entry.value}<br /> </c:forEach> </body> </html>
在web目录下——>找到c_foreach2.jsp。按照书本P157添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> <body> colorsList集合(指定迭代范围和步长)<br /> <% List colorsList=new ArrayList(); colorsList.add("red"); colorsList.add("yellow"); colorsList.add("blue"); colorsList.add("green"); colorsList.add("black"); %> <c:forEach var="color" items="<%=colorsList%>" begin="1" end="3" step="2"> ${color} </c:forEach> </body> </html>
在web目录下——>找到c_url.jsp。按照书本P158~P159添加补充即可。
<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> 使用绝对路径构造URL:<br /> <c:url var="myURL" value="http://localhost:8080/chapter07/c_out1.jsp"> <c:param name="username" value="张三"/> </c:url> <a href="${myURL}">c_out1.jsp</a><br /> 使用相对路径构造URL:<br /> <c:url var="myURL" value="c_out1.jsp?username=Tom" /> <a href="${myURL}">c_out1.jsp</a> </body> </html>
在web目录下——>找到if.jsp。按照书本P159~P160添加补充即可。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <title>Title</title> </head> <body> <fieldset> <c:if test="${param.action=='mon'}"> 周一了:工作的第一天,加油! </c:if> <c:if test="${param.action=='tues'}"> 周二了:工作的第二天,加油! </c:if> <c:if test="${param.action=='wed'}"> 周三了:工作的第三天,加油! </c:if> <c:if test="${param.action=='thu'}"> 周四了:工作的第四天,加油! </c:if> <c:if test="${param.action=='fri'}"> 周五了:工作的第五天,加油! </c:if> <c:if test="${param.action=='sat'}"> 周六了:休息的第一天! </c:if> <c:if test="${param.action=='sun'}"> 周日了:休息的第二天! </c:if> </fieldset> </body> </html>
五、实训要求,所需的各个截图(请勿直接复制拿去提交!)
(1)访问浏览器地址:"http://localhost:8080/chapter07/MyServlet"
(2)访问浏览器地址:"http://localhost:8080/chapter07/pageContext.jsp"
(3)访问浏览器地址:"http://localhost:8080/chapter07/scopes.jsp"
(4)访问浏览器地址:"http://localhost:8080/chapter07/param.jsp"
(5)访问浏览器地址:"http://localhost:8080/chapter07/cookie.jsp"
(6)访问浏览器地址:"http://localhost:8080/chapter07/initParam.jsp"
(7)访问浏览器地址:"http://localhost:8080/chapter07/test.jsp"
(8)访问浏览器地址:"http://localhost:8080/chapter07/c_out1.jsp"。再一次输入地址,不过后面加上一个参数?username=itcast。
(9)访问浏览器地址:"http://localhost:8080/chapter07/c_out2.jsp"。
(10)访问浏览器地址:"http://localhost:8080/chapter07/c_if.jsp"。
(11)访问浏览器地址:"http://localhost:8080/chapter07/c_choose.jsp"。
(12)访问浏览器地址:"http://localhost:8080/chapter07/c_foreach1.jsp"。
(13)访问浏览器地址:"http://localhost:8080/chapter07/c_foreach2.jsp"。
(14)访问浏览器地址:"http://localhost:8080/chapter07/c_url.jsp"。点击页面中两个其中一个超链接,跳转到c_out1.jsp页面。
(15)访问浏览器地址:"http://localhost:8080/chapter07/if.jsp"。