jsp练习1

本文详细介绍了JSP的page、include和taglib指令的用途和语法,强调了编码设置对中文字符显示的影响。同时,展示了如何在JSP中嵌入Java代码和使用表达式,以及request对象在处理HTTP请求参数中的作用。在实践中,作者遇到了编码问题和参数传递的挑战。
摘要由CSDN通过智能技术生成

一、JSP的语法有哪些?各指令有什么功用?

1.page指令page指令用于定义整个JSP页面的相关属性。

page的语法格式如下:

<%@ page attr=”value1” attr2=”value2”...%>

①language属性(目前只支持java语言)

<%@ page language=”java”%>

②extends属性:用于设置JSP页面继承的java类(该属性不常用,而且有可能影响服务器的性能   优化)

import属性:该属性用于设置JSP导入的类包。

<%@ page import=”java.util.*”%>

④pageEncoding属性:该属性用于定义JSP页面的编码格式,也就是指定文件编码

<%@ page pageEncoding=”UTF-8”%>(如果属性值设置为ISO-8859-1,那么整个JSP页面就不 支持中文字符,通常设置编码格式为GBK或UTF-8)

 ⑤contentType属性

 <%@ page contentType=”text/html; charset=UTF-8”%>

2.include指令用于文件包含,指该指令可以在JSP页面中包含另一个文件的内容(但仅支持静态包含)。

include的语法格式如下:

<%@ include file=”validate.jsp”%>

3.taglib指令:该指令用于加载用户自定义标签,使用该指令加载后的标签可以直接在JSP页面中使用。

taglib语法格式如下:

<%@ taglib prefix=”fix” uri=”tagUriorDir”%>

①prefix属性:用于设置加载自定义标签的前缀

②uri属性:用于指定自定义标签的描述符文件位置

例如:<%@ taglib prefix=”view” uri=”/WEB-INF/tags/view.tld%>

4.关于include指令的联系。(例5-2,在当前页面中包含另一个JSP文件来显示当前日期。P84)

(1)首先编辑date.jsp文件,程序代码如下:

<%@page pageEncoding="GB18030"%>
<%@page import = "java.util.Date" %>
<%
	Date now = new Date();
	String dateStr;
	dateStr = String.format("%tY年%tm月%td日",now,now,now);
%>
<%=dateStr %>

在esclipe中截图如下:

(2)编辑index.jsp文件,其中使用了include指令包含date.jsp文件到当前页面,程序代码如下:

<%@page language="java"  import="java.util.*"
	contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>include指令演示</title>
</head>
<body>
	<!-- HTML注释信息 -->
	当前日期是:
	<%@include file="date.jsp" %>
	<br>
</body>
</html>

在esclipe中截图如下:

程序运行结果如下图所示:

注意:被include指令包含的JSP页面中不要使用<html>和<body>标签,它们是HTML的结构标签,被包含进其他JSP页面会破坏页面格式。另外还要注意源文件和被包含文件中的变量和方法的名称不要冲突,因为它们最终会生成一个文件,重名将导致错误发生。

二、关于嵌入Java代码的练习

 1.代码片段:在JSP页面中嵌入的Java代码,也可称为脚本段或脚本代码。

其语法格式如下:

<% 编写Java代码 %>        (编写单行或多行的Java代码,语句以“;”结尾。)

2.(例5-3 在代码片段中编写循环输出九九乘法表。 P85)

程序代码如下:

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>JSP的代码片段</title>
</head>
<body>
	<%
		long startTime = System.nanoTime(); //记录开始时间,单位纳秒
	%>
	输出九九乘法表
	<br>
	<%
		for(int i = 1;i<=9; i++){           //第一层循环
			for(int j = 1; j<=i; j++){      //第二层循环
				String str = j + "*" + i + "=" + j * i;
				out.print(str + "&nbsp");   //使用空格格式化输出
			}
			out.println("<br>");            //HTML换行
		}
		long time = System.nanoTime()-startTime; 
	%>
	生成九九乘法表用时
	<%
		out.println(time/1000);             //输出用时多少毫秒
	%>
	毫秒。
</body>
</html>

在esclipe中截图如下:

 

程序运行结果如下图所示:

 在练习过程中遇到的问题:

打开esclipe自带的pageEncoding属性指定的文件编码和contentType属性指定的字符编码都是“ISO-8859-1”,运行结果是九九乘法表可以显示,但是中文字符是乱码,如下图:

 

一开始是照着书上打代码,书上pageEncoding属性指定的文件编码是“GB18030”,于是我把文件编码和字符编码都改成了“GB18030”,程序运行页面是空白,title部分是乱码,运行结果如下图:

 

 

 我将pageEncoding属性的指定文件编码和contentType属性的字符编码改为“UTF-8”才出现了正确的运行页面,于是我又多看了几遍P83关于pageEncoding属性和contentType属性的知识点,书上说通常设置编码格式为GBK或UTF-8,但是我设置了GBK也会出现乱码(可能是其他地方有问题),所以我觉得保险起见用UTF-8编码更好。

2.JSP表达式

JSP表达式可以直接把Java的表达式结果输出到JSP页面中。表达式的最终运算结果将被转换为字符串类型,因为在网页中显示的文字都是字符串。

JSP表达式的语法格式如下:

<%=  表达式  %>

其中,表达式可以是任何Java语言的完整表达式。

例如,圆周率是:<%=  Math.PI  %>

        关于JSP表达式的内容有点不太理解,看字面意思能懂,但是不知道怎么用,希望在之后的联系中能明白。

3.注释

①HTML注释的语法格式如下:

<!--  注释文本  -->

②JSP注释的语法格式如下:

<%--  注释文本  --%>

③动态注释(用HTML和JSP注释的组合构成):

<!--  <%=new Date()%>  -->

④代码注释

//单行注释

/*  多行注释  */

三、request对象

1.request对象是javax.servlet.http.HttpServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接收通过HTTP传送到服务器端的数据(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

在一个请求中,可以通过使用“?”的方式来传递参数,然后通过request对象的getParameter()方法来获取参数的值。例如:

String id = request.getParameter("id");

如果request对象中不存在此参数,那么该方法将会返回null。

按照P88练习如下:

index.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href = "show.jsp?id=123">获取请求参数的值</a>
</body>
</html>

在esclipe中截图如下:

 show.jsp页面代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	id参数的值为:<%=request.getParameter("id") %><br>
	name参数的值为:<%=request.getParameter("name") %><br>
	age参数的值为:<%=request.getParameter("age") %><br>
	grade参数的值为:<%=request.getParameter("grade") %><br>
</body>
</html>

在esclipe中截图如下:

 程序运行结果如下图所示:

 

 在练习过程中遇到的问题:

我在show页面设置了很多参数是因为我希望在index.jsp页面中多设置几个参数,就是点击一个链接,可以获得id、name、age等参数,然后grade参数值为null,但是我不知道怎么把这些参数设置在一个链接里,试了几次都不行,截图如下:

 

 

2.例5-5,获取Form表单信息。P89

创建Form.jsp页面文件,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
	<form action="liti5-5show.jsp" method="post">
		<ul style="list-sty;e:none line-height:30px">
			<li>输入用户姓名:<input type="text" name="name"/><br/></li>
			<li>性别选择:
				<input name="sex" type="radio" value="男"/>男
				<input name="sex" type="radio" value="女"/>女
			</li>
			<li>
				选择密码提示问题:
				<select name="question">
					<option value="母亲生日">母亲生日</option>
					<option value="宠物名称">宠物名称</option>
					<option value="电脑配置">电脑配置</option>
				</select>
			</li>
			<li>请输入问题答案:<input type="text" name="key"/></li>
			<li>
				请选择个人爱好:
				<div style="width:400px">
					<input name="like" type="checkbox" value="唱歌跳舞"/>唱歌跳舞
					<input name="like" type="checkbox" value="上网冲浪"/>上网冲浪
					<input name="like" type="checkbox" value="户外登山"/>户外登山<br/>
					<input name="like" type="checkbox" value="体育运动"/>体育运动
					<input name="like" type="checkbox" value="读书看报"/>读书看报
					<input name="like" type="checkbox" value="欣赏电影"/>欣赏电影
				</div>
			</li>
			<li><input type="submit" value="提交"/></li>
		</ul>
		</form>
</body>
</html>

在esclipe中截图如下:

 show.jsp页面文件代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<ul style="list-style:none; line-height:30px">
		<li>输入用户姓名:
		<%=new String(request.getParameter("name").getBytes("ISO8859_1"),"UTF-8")%></li>
		<li>选择性别:
		<%=new String(request.getParameter("sex").getBytes("ISO8859_1"),"UTF-8")%></li>
		<li>选择密码提示问题:
		<%=new String(request.getParameter("question").getBytes("ISO8859_1"),"UTF-8")%></li>
		<li>请输入问题答案:
		<%=new String(request.getParameter("key").getBytes("ISO8859_1"),"UTF-8")%></li>
		<li>
			请选择个人爱好:
			<%
				String[] like=request.getParameterValues("like");
				for(int i=0; i<like.length; i++){
			%>
			<%= new String(like[i].getBytes("ISO8859_1"),"UTF-8")+"&nbsp;&nbsp;" %>
			<% 	}
			%>
		</li>
	</ul>
	
</body>
</html>

程序运行结果如下图所示:

             

在练习中遇到的问题:

如果我将getBytes(“ISO8859_1”)中的编码改成“UTF-8”运行页面就会出现乱码。

 

 我还发现了一个问题,就是要把jsp文件建立在Webcontent下面,如果建立在Webcontent文件夹的WEB-INF下面就会出现404页面。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值