JavaWeb学习
JSP
概述:
Java Server Pages:一种基于Java语言的应用开发技术。
JSP页面:
在传统的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面文件,按文本文件保存,拓展名为.jsp。
基本结构:
JSP页面可由5种元素组合而成:
① 普通的HTML标记符;
② JSP标记,如指令标记、动作标记;
③ 变量和方法的声明;
④ Java程序片;
⑤ Java表达式 ;
jsp成员变量和方法的声明:
<%! %>
之间声明变量或方法,方法在整个页面上有效。
<%! %>和<% %>声明变量的区别:
如以下两段简单的代码:
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
<BODY BGCOLOR=cyan>
<FONT size=4>
<%! int i=0; %>
<% i++; %>
<P>您是第 <%=i%> 个访问本站的客户。
</FONT>
</BODY>
</HTML>
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
<BODY BGCOLOR=cyan>
<FONT size=4>
<% int i=0; %>
<% i++; %>
<P>您是第 <%=i%> 个访问本站的客户。
</FONT>
</BODY>
</HTML>
在上面的两段简单的代码中,可以看到,除了变的声明方式不一样,其余的都一样,但运行界面却不相同。
第一段代码中,只要不重新启动服务,连续刷新页面,页面访问的次数会增加;
而对于第二段代码,无论是否重启服务,每次刷新页面,访问页面的次数均为1。
由此可以看出:
使用<%! %>声明的变量,在一次服务中的各个页面均有效,其定义的内容在一次服务的所有页面中实现共享;
而使用<% %>声明的变量仅仅在当前页面有效,声明的内容不可共享。
表达式:<%= %>
“ <%=”和“%>”之间可以是一个Java表达式 。
表达式的值由服务器负责计算,并将计算结果用字符串形式发送到客户端显示。
示例:
<%@ page contentType="text/html;charset=utf-8" %>
<HTML>
<BODY BGCOLOR=cyan>
<h3>这是一个简单的JSP页面</h3>
<% int i, sum=0;
for(i=1;i<=100;i++)
{ sum=sum+i;
}
%>
<h5> 1到100的连续和是:
<%=sum %>
</h5>
</BODY>
</HTML>
运行界面:
<%= %>与<% System.out.println(“ ”)%>有区别吗?
答:有区别。
<%= %>是将内容显示在浏览器的页面上;而<% System.out.println(“ ”)%>语句是将内容输出在控制台上。
第二次执行
JSP指令标记:
JSP指令(directive)告诉引擎如何处理JSP页面中的其余部分。
JSP指令:
JSP指令的基本语法格式:
<%@ 指令 属性名=”值” %>
如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。
page指令:
1、用来定义整个JSP页面的一些属性和这些属性的值。
2、属性值用单引号或双引号括起来。
3、page指令的作用对整个JSP页面有效,与其书写的位置无关,习惯把page指令写在JSP页面的最前面。
语法格式:
<%@ page contentType="text/html;charset=gb2312"%>
使用page指令解决JSP中文乱码:
1、通过page指令的contentType属性说明JSP源文件的字符集编码;
2、page指令的pageEncoding属性说明JSP源文件的字符集编码。
Include指令:
在JSP页面出现该指令的位置处,静态插入一个文件。
语法格式:
<%@ include file= "文件的URL " %>
注意:
1、如果该文件和当前JSP页面在同一Web服务目录中,那么“文件的URL”就是文件的名字;
2、如果该文件在JSP页面所在的Web服务目录的一个子目录中,比如fileDir子目录中,那么“文件的URL”就是“fileDir/文件的名字”。
3、静态插入,就是当前JSP页面和插入的文件合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java文件。
4、 file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。
taglib指令:
用于在JSP页面中导入标签库。
语法格式:
<%@ taglib uri="" prefix="c"%>
1、uri属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。
2、 prefix属性:标签的前缀,区分多个自定义标签。
示例:
<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
JSP动作标记:
用于在JSP页面中提供业务逻辑功能。
JSP常用标签:
<jsp:include>标签
<jsp:forward>标签 (转页面)
<jsp:param>标签
<jsp:plugin>标签
<jsp:useBean>标签
1、include 动作标记
<jsp:include> 标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
语法格式:
<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
2、param动作标记
param标记以“名字-值”的形式为其它标记提供附加信息。
语法格式:
<jsp:param name=“名字” value=“指定给param的值”>
注意:
1、 param标记不能独立使用,需作为jsp:include、jsp:forward、jsp:plugin标记的子标记来使用。
2、当该标记与jsp:include动作标记一起使用时,可以将param标记中的值传递到include动作标记要加载的文件中去,被加载的JSP文件可以使用Tomcat服务器提供的request内置对象获取include动作标记的param子标记中name属性所提供的值 。
3、forward动作标记
从该指令处停止当前页面的继续执行,而转向执行page属性指定的JSP页面。
语法格式:
<jsp:forward page="relativeURL | <%=expression%>" />
4、plugin动作标记
该动作标记指示JSP页面加载Java plugin插件。该插件由用户负责下载,并使用该插件来运行Java applet小程序。
语法格式:
<jsp:plugin type="applet" code="小程序的字节码文件" jreversion="java虚拟机版本号" width="小程序宽度值" height="小程序高度值" >
<jsp:plugin type="applet" code="小程序的字节码文件" jreversion="java虚拟机版本号" width="小程序宽度值" height="小程序高度值" >
JSP内置对象:
1. request
封装了用户请求页面时所提交的信息,该对象调用相应的方法可以获取封装的信息.即request对象可以获取用户提交的信息。
例如用户提交信息表单:
<FORM action="tom.jsp" method=post >
<INPUT type="text" name="boy" value="ok" >
<INPUT TYPE="submit" value="送出" name="submit">
</FORM>
提交表单的汉字信息处理:
String str=request.getParameter("boy");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b,"utf-8");
2. response
在某些情况下,JSP引擎在响应用户时,可能需要将用户重新引导至另一个页面。
例如,如果用户输入的表单信息不完整,就会再次被引导到该表单的输入页面。
使用response对象的sendRedirect(URL url)方法实现用户的重定向。 cookie/session。
3. out
out对象是一个输出流,用来向用户端输出数据。
4. session
Session用于跟踪客户的状态。
5. application
任何客户在所访问的服务目录的各个页面浏览时,application对象都是同一个。
6. config
7. pagecontext
8. page
9. exception
练习:
需求:从页面上输入一个姓名,提交后在另一个页面中显示,并解决汉字乱码问题。
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>
This is my first page!<br>
<form action="helloservlet.html" method="post">
姓名:<input type="text" name="name">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>HelloServlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.zkrt.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloservlet.html</url-pattern>
</servlet-mapping>
</web-app>
HelloServlet:
package com.zkrt.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloServlet
*/
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String name=request.getParameter("name");
byte b[]=name.getBytes("ISO-8859-1");
name=new String(b,"utf-8");
response.setContentType("text/html;charset=utf-8");
response.getWriter().append("Served at: ").append(request.getContextPath());
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is :");
out.println(name);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(request, response);
}
}
页面展示:
第一个页面,输入姓名后提交。
第二个页面,将输入的信息展示出来。