一、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注释的区别:

CGIjava小程序java servletASPjava脚本JSP之间的区别_servlet

例如:

<%@ 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>

CGIjava小程序java servletASPjava脚本JSP之间的区别_java_02

1.2JSP 运行原理

JSP页面中普通的HTML标记符号,交给客户的浏览器执行显示。

JSP标记、数据和方法声明、Java程序片由Tomcat服务器负责执行,将需要显示的结果发送给客户的浏览器。

Java表达式由Tomcat服务器负责计算,将结果转化为字符串,交给客户的浏览器负责显示。

CGIjava小程序java servletASPjava脚本JSP之间的区别_tomcat_03

Tomcat服务器的web.xml(D:\apache-tomcat-7.0.27\conf\web.xml)文件中实现了JSP的相关配置:

CGIjava小程序java servletASPjava脚本JSP之间的区别_servlet_04

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表达式

CGIjava小程序java servletASPjava脚本JSP之间的区别_servlet_05

1.3 JSP的执行过程

Jsp的本质是servlet, 通过response的printWriter返回,response的getOutputStream只能调用一次,返回流就不能返回页面刷新

JSP的执行过程主要可以分为以下几点:

客户端发出请求。

Web容器将JSP转译成Servlet源代码。

Web容器将产生的源代码进行编译。

Web容器加载编译后的代码并执行。

把执行结果响应至客户端。

CGIjava小程序java servletASPjava脚本JSP之间的区别_servlet_06

二、在JSP页面中使用HTML标记

JSP页面可以含有HTML标记,当客户通过浏览器请求一个JSP页面时,Tomcat服务器将该JSP 页面中的HTML标记直接发送给客户的浏览器,由客户的浏览器负责执行这些HTML标记。

而JSP 页面中的变量声明、程序片以及表达式由Tomcat服务器处理后,再将有关的结果用文本方式发送给客户端的浏览器。

     JSP页面中的HTML标记是页面的静态部分,即不需要服务器做任何处理,直接发送给客户的信息。

以下介绍 JSP页面中使用的HTML标记

2.1 表单标记

表单的一般格式如下

<FORM  method= get| post  action="提交信息的目的地页面"  name="表单的名字">

数据提交手段部分

</FORM>

CGIjava小程序java servletASPjava脚本JSP之间的区别_java_07

<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>

CGIjava小程序java servletASPjava脚本JSP之间的区别_tomcat_08

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>

获取表单提交的数据: 

 

CGIjava小程序java servletASPjava脚本JSP之间的区别_HTML_09