欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb程序设计学习笔记整理(7)-JSP语法

程序员文章站 2022-07-14 22:05:47
...

JSP

JSP的由来,为什么有JSP?

  • servlet技术从产生以后,在使用servlet最麻烦的是使用大量的pw.println()语句输出页面。在页面的变更、维护以及效果的实现上都带来了不便性,所以才退出了JSP这种技术。
  • jsp是sun公司制定的一种服务器端动态页面技术的组件规范。JavaServerPage。
  • html是浏览器端静态页面的一种技术。
  • jsp是一个以.jsp为后缀的文件,在该文件中,主要包含HTML的内容,包含CSS,JavaScript的内容,同时也可以在jsp文件中包含少量的java代码。

如何编写jsp? – jsp文件的结构内容

  • step1:写一个以.jsp为后缀的文件
  • step2:在该文件中,可以包含如下的内容:
    –HTML(CSS,JavaScript)
    Java代码
    –注释
    指令
    隐含对象
    (强调:在jsp页面中的更改,只保存就可以,不需要重新部署了,其它地方的代码更改,要保存也要重新部署。)

JSP页面中的Java代码

jsp表达式写法(Java代码可以写在jsp文件中的任意位置)

  语法:<%=.............  %>
  内容:变量、变量加运算符组合的表达式、常量值、有返回值的方法。
  功能:将内容输出到页面上

jsp小脚本写法(Java代码可以写在jsp文件中的任意位置)

  语法:<%  ......    %>
  内容:java代码的片段
  功能:通过代码片段完成响应的功能

指令

jsp声明写法(jsp的声明一般写在jsp页面的开头)

  语法:<%@指令名  属性1=值1  属性2=值2  ...  %>
  • page指令
  pageEncoding=”utf-8” 设置jsp文件保存时中文编码问题
  import=””   在jsp页面中导包用的
  • include指令
  功能:能够将其它文件包含进来,可以包含jsp文件,也可以包含静态的html文件
  语法:<%@include  file=”html文件或者jsp文件”  %>

注释

语法:

  • <!-- 注释内容 -->
    html注释,注释中的内容如果包含java代码,这些java代码会被执行的
  • <%-- 注释内容 -->
    jsp注释,如果注释的内容中出现Java代码,会被忽略

如图所示:age1会爆红
JavaWeb程序设计学习笔记整理(7)-JSP语法

隐含/隐藏对象

概念:

jsp页面自动创建,在jsp文件中可以直接使用的对象

jsp页面中包含的隐含对象有哪些?

①request 请求信息
②response 响应信息
③out 输出的数据流,能够向页面输入内容
④session 会话
⑤application 全局的上下文对象
⑥pageContext jsp页面的上下文
request、session、application、pageContext是jsp页面的4大作用域对象。

创建一个jsp页面

WebRoot下,新建jsp页面,名为jsp01.jsp,点击Finish
JavaWeb程序设计学习笔记整理(7)-JSP语法
注意:新建的jsp页面的位置
JavaWeb程序设计学习笔记整理(7)-JSP语法
自动生成代码,如图显示:
JavaWeb程序设计学习笔记整理(7)-JSP语法
把页面上的代码,不用的删了
JavaWeb程序设计学习笔记整理(7)-JSP语法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'jsp01.jsp' starting page</title>
  </head>
  <body>
    This is my JSP page. <br>
  </body>
</html>

注意:jsp用浏览器打不开,html可以用浏览器直接打开
在服务器启动的情况下,在浏览器中输入http://localhost:8080/servlettest/jsp01.jsp,效果如图显示:
JavaWeb程序设计学习笔记整理(7)-JSP语法
JavaWeb程序设计学习笔记整理(7)-JSP语法
JavaWeb程序设计学习笔记整理(7)-JSP语法
JavaWeb程序设计学习笔记整理(7)-JSP语法
故不能使用中文(注释也不能是中文)
JavaWeb程序设计学习笔记整理(7)-JSP语法
jsp中的代码是不需要重新部署的
故,刷新jsp页面:http://localhost:8080/servlettest/jsp01.jsp,效果如下:
JavaWeb程序设计学习笔记整理(7)-JSP语法

代码部分:

part1:

<!-- 指令:jsp声明写法 --> 
<%@page pageEncoding="utf-8" %>
<%@page import="java.util.Date" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'jsp01.jsp' starting page</title>
  	<!-- 内部样式 -->
  	<style>
  		/*标记选择器*/
  		span{
  			color:green;
  		}
  	</style>
  </head>
  <body>
  	This is my JSP page.<br/>
  	<!-- 内联样式 -->
  	<div style="color:red;">woshidiv</div>
  	<span>woshispan</span>
  	<!-- jsp页面中的java代码 (两种方式) -->
  	<!-- 1.jsp表达式写法 -->
    <br/>
    <%=1 %>
    <%=3.14 %>
    <%=10+10 %>
    10+10
    <%=Math.PI %>
    <%=Math.sqrt(9) %>
    <br/>
           显示系统时间:<span style="color:red;font-size:35px;"><%=new Date() %></span>
	
	<hr/>
	<!-- 2.jsp小脚本写法 --> 
	<%
		int a = 10;
		int b = a + 20;
		System.out.println(a + "," + b); //向控制台输入a和b的值
		out.println(a + "," +b); //out是jsp的隐藏对象,out.println()能够向页面输出a和b的值 [法1]
		for (int i = 1; i <=10; i++) {
			out.println(i);
		}
		Date dd = new Date();
		out.println(dd);
	 %>
	 <!-- 能够向页面输出a和b的值  [2]-->
	 a=<%=a %> b=<%=b %>
	 
	 <!-- 使用include指令导入静态的html 乱码!!!-->
	 <%@include file="registe.html" %>
	 <br/>
	 <!-- 使用include指令导入jsp页面 建议!-->
	 <%@include file="index.jsp" %>
	 
	 <hr/>
	 <!-- 注释 -->
	 <!-- 
	 	<%
	 		int age = 30;
	 	%>
	 -->
	 <%=age %>
	 <hr/>
	 <%-- 
	 	<%
	 		int age1 = 50;
	 	%>
	 --%>
	 <%--
		<%=age1 %> 报错
	 --%>
	 <hr/>
	 
	 <%-- request内置对象 --%>
	 <a href="jsp02.jsp?&a=10&b=100">点我去另外一个jsp页面</a>
  </body>
</html>

registe.html

<!-- 版本信息 -->
<!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>
		<!-- action="" 表示点击提交按钮此表单会向哪个servlet发送请求,双引号中写哪一个url-pattern地址,
		此表单就会向哪一个servlet发送请求。【访问页面,点击提交,成功访问到RegisteServlet】-->
		<!-- 默认浏览器地址栏中会显示数据,method="get";而不显示则修改为,method="post" -->
		<form action="delete" method="post">
			用户名:<input type="text" name="username"/>
			<br/>
			密码:<input type="password" name="pwd"/>
			<br/>
			兴趣爱好:读书<input type="checkbox" name="love" value="readbook"/>
				        写字<input type="checkbox" name="love" value="write"/>
				        打球<input type="checkbox" name="love" value="playball"/>
				        上网<input type="checkbox" name="love" value="online"/>
			<br/>
			<input type="submit" name="smt" value="提交"/>
		</form>
		
		<!-- 测试超链接的请求方式 -->
		<a href="http://www.baidu.com">你好</a>
		<br/>
		<!-- 没有传递参数,username接收为空,异常为NullPointerException -->
		<!-- <a href="registe">hello</a> -->
		<a href="ho">hello</a>
		<br/>
		<a href="registe?username=ls&pwd=123&love=ds&love=xz&id=1001">点我可访问RegisteServlet</a>
	</body>
</html>

index.jsp

<%@page pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  <body>
    This is my JSP page. <br>
    你好
  </body>
</html>

jsp02.jsp

<%@page pageEncoding="utf-8" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<title>My JSP 'jsp02.jsp' starting page</title>
  </head>
  <body>
  	欢迎
  	<!-- 使用request内置对象接收请求中的参数,在jsp页面中request内置对象可以直接使用 -->
  	<%
  	 	String s1 = request.getParameter("a");
  	 	out.println(s1);
  	 	String s2 = request.getParameter("b");
  	 	out.println(s2);
  	 %>
  </body>
</html>

part2:

<%@page pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'jsp03..jsp' starting page</title>
  </head>
  <body>
    This is my JSP page. <br>
    <!-- 使用response内置对象 -->
    <%
    	//response.sendRedirect("ho");
    	//重定向到:http://localhost:8080/servlettest/ho
    	response.sendRedirect("list");
     %>
  </body>
</html>

HelloServlet.java

package com.bzxy.test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//该类表示在服务器端的一个servlet类
public class HelloServlet extends HttpServlet {
	
	//调出service方法
	//service Alt + / 快捷键自动提示
	//                                  请求                                                              响应
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//request参数:用于接受浏览器端发送过来的请求
		//response参数:用于向浏览器端响应
		
		//向控制台Console输出HelloServlet
		System.out.println("HelloServlet"); 
		//向页面(浏览器端)响应内容HelloServlet
		PrintWriter o = response.getWriter();
		o.println("HelloServlet1");
		o.println("HelloWorld");
		
		//在servlet中通过java代码创建Date日期
		//Date d = new Date();
		//将创建的日期d输出在页面上
		//o.println(d);
		//等价写法
		o.println(new Date());
	}
	
}

RegisteServlet.java

package com.bzxy.test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//表示服务器端的一个servlet,该servlet主要功能是接收浏览器端registe.html页面
//发送过来的请求和请求中包含的参数
//浏览器端(页面)  <==>   服务器端(servlet)  <==>   服务器端(数据库)
public class RegisteServlet extends HttpServlet{
	
	//调用service方法
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//接收参数之前设置中文编码 -- 支持post请求方式
		/*对应registe.html的<form action="registe" method="post">*/
		request.setCharacterEncoding("utf-8");
		
		//System.out.println("测试...");
		//未添加以下代码时,访问网址http://localhost:8080/servlettest/registe.html
		//点击提交之后,页面空白,网址变为:http://localhost:8080/servlettest/registe?username=...&pwd=...&smt=...
		
		//##用户名用英文输入,否则乱码,需进一步处理
		//request请求;response响应
		//http://localhost:8080/servlettest/registe?username=zs&pwd=aaa
		//通过request接收请求参数的值
		String s1 = request.getParameter("username");
		//如果是get请求方式提交的值是中文,s1是乱码,也就是??????
		//浏览器如果采用的是get方法提交的数据,编码默认采用的是"iso-8859-1"编码
		//通过String字符串类进行编码的转换,由"iso-8859-1"编码转换为"urf-8"编码
		//你好 -用-> iso-8859-1 -解码-> 011100111111... -用-> utf-8 -重新生成-> 你好 
		//getBytes 获得
		String s11 = new String(s1.getBytes("iso-8859-1"), "utf-8");
		String s2 = request.getParameter("pwd");
		//http://localhost:8080/servlettest/registe
		//?username=zs&pwd=aa&
		///love=readbook&love=write&love=playbook&smt=%E6%8F%90%E4%BA%A4
		//String[]表示字符串类型的数组,该数组中应该存储4个value值
		String[] s3 = request.getParameterValues("love");
		/*对应registe.html的<a href="registe?username=ls&pwd=123&love=ds&love=xz&id=1001">点我可访问RgisteServlet</a>*/
		//接收超链接请求中参数值 id = 1001
		//String s4 = request.getParameter("id");
		
		//用户名输入:你好
		System.out.println("原始:" + s1); //原始:??????
		System.out.println("转码后:" + s11); //转码后:你好
		
		//在获取PrintWriter之前写上中文编码设置
		response.setContentType("text/html;charset=utf-8");
		//设置之后,println不起效果,只能用标记换行 两种方式:可自己加换行,也可自己直接输出换行
		
		//通过response向页面返回结果
		PrintWriter pw = response.getWriter();
		pw.println("<div style='color:red;'>以下为通过response向页面的返回结果:</div>");
		pw.println("<br/>");
		//pw.println(s1 + "<br/>");
		pw.println(s11 + "<br/>");
		pw.println(s2 + "<br/>");
		//s3 --> readbook write playball online
		//下标                      0		1		2		3
		//若多选项选择包含readbook,则显示readbook
		pw.println(s3[0] + "<br/>"); //根据下标对应的内容输出
		//若四个多选项都选择,则显示[readbook, write, playbook, online]
		pw.println(Arrays.toString(s3)); //借助于toString方法,可直接将数组中所有的内容输出
		//pw.println(s4);
	}
	
}

效果图:

part1:

在浏览器中输入http://localhost:8080/servlettest/jsp01.jsp,效果如图显示:
JavaWeb程序设计学习笔记整理(7)-JSP语法
JavaWeb程序设计学习笔记整理(7)-JSP语法
点击点我去另外一个jsp页面,效果及地址变化如图所示:
JavaWeb程序设计学习笔记整理(7)-JSP语法
JavaWeb程序设计学习笔记整理(7)-JSP语法

part2:

进HelloServlet.java

在浏览器中输入http://localhost:8080/servlettest/jsp03.jsp,效果如图显示:
JavaWeb程序设计学习笔记整理(7)-JSP语法
回车,立刻跳转地址:http://localhost:8080/servlettest/ho,效果为:
JavaWeb程序设计学习笔记整理(7)-JSP语法
JavaWeb程序设计学习笔记整理(7)-JSP语法

进EmpListServlet.java

在浏览器中输入http://localhost:8080/servlettest/jsp03.jsp,效果如图显示:
JavaWeb程序设计学习笔记整理(7)-JSP语法
回车,立刻跳转地址:http://localhost:8080/servlettest/list,效果为:
JavaWeb程序设计学习笔记整理(7)-JSP语法
JavaWeb程序设计学习笔记整理(7)-JSP语法

测试Java中Date:

代码部分:

package com.bzxy.test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//该类表示在服务器端的一个servlet类
public class HelloServlet extends HttpServlet {
	
	//调出service方法
	//service Alt + / 快捷键自动提示
	//                                  请求                                                              响应
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//request参数:用于接受浏览器端发送过来的请求
		//response参数:用于向浏览器端响应
		
		//向控制台Console输出HelloServlet
		System.out.println("HelloServlet"); 
		//向页面(浏览器端)响应内容HelloServlet
		PrintWriter o = response.getWriter();
		o.println("HelloServlet1");
		o.println("HelloWorld");
		
		//在servlet中通过java代码创建Date日期
		//Date d = new Date();
		//将创建的日期d输出在页面上
		//o.println(d);
		//等价写法
		o.println(new Date());
	}
	
}

效果图:

在浏览器中输入地址:http://localhost:8080/servlettest/ho,效果图如下:
JavaWeb程序设计学习笔记整理(7)-JSP语法
JavaWeb程序设计学习笔记整理(7)-JSP语法
控制台内显示:
JavaWeb程序设计学习笔记整理(7)-JSP语法

相关标签: JavaWeb程序设计