JavaWeb程序设计学习笔记整理(7)-JSP语法
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
会爆红
隐含/隐藏对象
概念:
jsp页面自动创建,在jsp文件中可以直接使用的对象
jsp页面中包含的隐含对象有哪些?
①request 请求信息
②response 响应信息
③out 输出的数据流,能够向页面输入内容
④session 会话
⑤application 全局的上下文对象
⑥pageContext jsp页面的上下文
request、session、application、pageContext是jsp页面的4大作用域对象。
创建一个jsp页面
在WebRoot
下,新建jsp页面,名为jsp01.jsp
,点击Finish
注意:新建的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
,效果如图显示:
故不能使用中文(注释也不能是中文)
jsp中的代码是不需要重新部署的
故,刷新
jsp页面:http://localhost:8080/servlettest/jsp01.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
,效果如图显示:
点击点我去另外一个jsp页面
,效果及地址变化如图所示:
part2:
进HelloServlet.java
在浏览器中输入http://localhost:8080/servlettest/jsp03.jsp
,效果如图显示:
回车,立刻跳转地址:http://localhost:8080/servlettest/ho
,效果为:
进EmpListServlet.java
在浏览器中输入http://localhost:8080/servlettest/jsp03.jsp
,效果如图显示:
回车,立刻跳转地址:http://localhost:8080/servlettest/list
,效果为:
测试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
,效果图如下:
控制台内显示:
上一篇: 程序设计基础II学习笔记