一、JSP概述
1.1 什么是JSP
JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。
JSP全名是Java Server Page,它是建立在Servlet规范之上的动态网页开发技术。
在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与普通HTML有所区别,JSP文件的扩展名为 .jsp。
JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows 上。
在jsp文件中,使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
注意:HTML和JSP注释的区别:
例如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>我的jsp页面</title>
</head>
<body>
This is my JSP page.
<%
Date date = new Date();
out.print(date.toString());
%>
<br>
</body>
</html>
1.2JSP 运行原理
把JSP页面中普通的HTML标记符号,交给客户的浏览器执行显示。
JSP标记、数据和方法声明、Java程序片由Tomcat服务器负责执行,将需要显示的结果发送给客户的浏览器。
Java表达式由Tomcat服务器负责计算,将结果转化为字符串,交给客户的浏览器负责显示。
Tomcat服务器的web.xml(D:\apache-tomcat-7.0.27\conf\web.xml)文件中实现了JSP的相关配置:
Tomcat中的JSP引擎就是这个Servlet程序,该Servlet程序实现了对所有JSP页面的解析。
JSP文件也可以像Servlet程序一样,在web.xml文件中进行注册和映射虚拟路径。
注册JSP页面的方式与Servlet类似,只需将<servlet-class>元素修改为<jsp-file>元素即可。
<servlet>
<servlet-name>FirstServlet</servlet-name>
<jsp-file>/index.jsp</jsp-file>
</servlet>
<!-- <jsp-file>元素表示JSP文件,
它表示的路径必须以“/”开头,这个“/”表示
JSP文件所在的Web应用程序的根目录。 -->
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/diaolove</url-pattern>
</servlet-mapping>
映射虚拟路径也可以访问index.jsp文件
1.3 jsp页面页面组成
在传统的HTML页面文件中加入Java程序片和JSP标签,就构成了一个JSP页面。
JSP页面可由5种元素组合而成:
① 普通的HTML标记符;
② JSP标记,如指令标记、动作标记;
③ 变量和方法的声明;
④ Java程序片;
⑤ Java表达式
1.3 JSP的执行过程
Jsp的本质是servlet, 通过response的printWriter返回,response的getOutputStream只能调用一次,返回流就不能返回页面刷新。
JSP的执行过程主要可以分为以下几点:
客户端发出请求。
Web容器将JSP转译成Servlet源代码。
Web容器将产生的源代码进行编译。
Web容器加载编译后的代码并执行。
把执行结果响应至客户端。
二、在JSP页面中使用HTML标记
JSP页面可以含有HTML标记,当客户通过浏览器请求一个JSP页面时,Tomcat服务器将该JSP 页面中的HTML标记直接发送给客户的浏览器,由客户的浏览器负责执行这些HTML标记。
而JSP 页面中的变量声明、程序片以及表达式由Tomcat服务器处理后,再将有关的结果用文本方式发送给客户端的浏览器。
JSP页面中的HTML标记是页面的静态部分,即不需要服务器做任何处理,直接发送给客户的信息。
以下介绍 JSP页面中使用的HTML标记。
2.1 表单标记
表单的一般格式如下:
<FORM method= get| post action="提交信息的目的地页面" name="表单的名字">
数据提交手段部分
</FORM>
<Input>标记
在表单中用Input标记来指定表单中数据的输入方式以及表单的提交键。
其基本格式如下:
<Input type="输入对象的GUI类型" name= "名字" >
服务器通过属性name指定的名字来获取"输入对象的GUI类型"中提交的数据。
"输入对象的GUI类型"可以是:text(文本框)、checkbox(检查框)、submit(提交键)、hidden(隐藏)等 .
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="receive.jsp" method=post name=form>
<P>请输入下列信息:
<BR>输入您的姓名:<Input type="text" name="name" value="张三"></BR>
<BR>选择性别:<Input type="radio" name="R" value="男" checked="default">男
<Input type="radio" name="R" value="女">女
</BR>
<BR>选择您喜欢的歌手:
<Input type="checkbox" name="superstar" value="张歌手" >张歌手
<Input type="checkbox" name="superstar" value="李歌手" >李歌手
<Input type="checkbox" name="superstar" value="刘歌手" >刘歌手
<Input type="checkbox" name="superstar" value="王歌手" >王歌手
</BR>
<Input type="hidden" value="这是隐藏信息" name="secret">
<Input type="submit" value="提交" name="submit">
</form>
</body>
</html>
receive.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;Charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'receive.jsp' starting page</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String yourName = request.getParameter("name"); //获取text提交的值
String yourSex = request.getParameter("R"); //获取radio提交的值
String secretMess = request.getParameter("secret"); //获取hidden提交的值
String personName[] = request.getParameterValues("superstar");
//获取checkbox提交的值
out.println("<P> 您的姓名:" + yourName + "</P>");
out.println("<P> 您的性别:" + yourSex + "</P>");
out.println("<P> 您喜欢的歌手:");
if (personName == null) {
out.print("一个都不喜欢");
} else {
for (int k = 0; k < personName.length; k++) {
out.println(" " + personName[k]);
}
}
out.println("<P> hidden提交的值:" + secretMess);
%>
</body>
</html>
获取表单提交的数据: