JSP是由Sun公司倡导、许多公司参与而建立的动态网页技术标准。它在HTML代码中嵌入java代码片段(Scriptlet)和JSP标签,构成了JSP网页。在接收到用户请求时,服务器会处理java代码片段,然后生成处理结果的HTML页面返回给客户端,客户端的浏览器将呈现最终页面效果。
1、跨平台
2、业务代码分离
3、组件重用(javabean)
4、继承 Java Servlet功能
5、预编译
1、language属性
用于设置JSP页面使用的语言,目前只支持java语言,以后可能会支持其他语言,该属性默认值是java
2、extends属性
用于设置 JSP页面继承的 Java类,所有 JSP页面在执行之前都会被服务器解析成 Servlet,而 Servlet是由 Java类定义的,所以 JSP和 Servlet都可以继承指定的父类。该属性并不常用,而且有可能影响服务器的性能优化。
3、import 属性
用于设置 JSP导入的类包。JSP 页面可以嵌入 java代码片段,这些java代码在调用 API时需要导入相应的类包。
4、pageEncoding属性
用于定义 JSP页面的编码格式,也就是指的文件编码。 JSP页面中的所有代码都使用该属性指的的字符集,如果该数据值为ISO-8859-1,那么这个jsp页面就不支持中文字符。通常设置编码格式为 GBK 或 UTF-8
5、contentType属性
用于设置 JSP 页面的 MIME类型和字符编码,浏览去会据此显示网页内容。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
这是我保存的jsp页面
body>
html>
该指令用于文件包含。该指令可以在 JSP页面中包含另一个文件的内容,但是它仅仅支持静态包含,也就是说被包含文件中的所有内容都被原样包含到该 JSP 页面中;如果被包含文件中有代码,将不被执行。被包含的文件可以是一段java代码、HTML代码或者是另一个 jsp页面。
一个index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
当前的日期是:
<%@ include file="date.jsp" %>>
body>
html>
一个date.jsp
<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Date now=new Date();
String dateStr;
dateStr=String.format("%tY年%tm月%td日", now, now,now);
%>
<%=dateStr %>
该指令用于加载用户自定义标签,使用该指令加载后的标签可以直接在 JSP 页面中使用。其语法格式为:
<%@ taglib prefix="view" uri="/WEB-INF/tags/view.tld">
实现九九乘法表
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<%
long startTime=System.nanoTime();
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
String str=j+"x"+i+"="+(i*j);
out.print(str+" ");
}
out.print("
");
}
long endTime=System.nanoTime()-startTime;
/* out.println(endTime); */
%>
生成九九乘法表,用时<% out.println(endTime/1000);%>毫秒
body>
html>
JSP表达式可以直接把JAVA的表达式结果输出到JSP页面中。表达式的最终运算结果将被转换为字符串类型,因为在网页中显示的文字都是字符串,JSP表达式的语法格式为:(比如圆周率)
<%= Math.PI%>
具体实例代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 在java中定义一个方法<%! 方法实现 %> --%>
<%!
public String add(int a,int b){
return ""+(a+b);
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
圆周率是:<%=Math.PI%>
<br>
<%String sum=add(10,20); %>
<input type="text" value="<%=sum %>">
body>
html>
语法:
String request.getParameter(String parameter)
实例演示:从show.jsp获取index.jsp页面中的id值
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<a href="show.jsp?id=001">获取id的值a>
body>
html>
show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
id的值为:<%=request.getParameter("id") %>
<br>
name的值为:<%=request.getParameter("name") %>
body>
html>
运行结果为:
id的值为:001
name的值为:null
语法
String[] request.getParameterValues(String parameter)
具体实例演示
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<form action="show.jsp" method="post">
请输入用户姓名:<input type="text" name="name"><br>
选择性别:<input type="radio" value="男" name="sex">男
<input type="radio" value="女" name="sex">女
<br>
密码提示问题
<select name="question">
<option value="母亲的生日">母亲的生日option>
<option value="父亲的名字">父亲的名字option>
select>
<br>
请输入问题答案:<input type="text" name="key"/><br>
请选择个人爱好:
<input type="checkbox" value="唱歌跳舞" name="like"/>唱歌跳舞
<input type="checkbox" value="户外登山" name="like"/>户外登山
<input type="checkbox" value="网上冲浪" name="like">网上冲浪
<br>
<input type="submit" value="提交">
form>
body>
html>
show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
用户名:<%=new String(request.getParameter("name").getBytes("ISO8859_1"),"UTF-8") %>
<br>
性别:<%=new String(request.getParameter("sex").getBytes("ISO8859_1"),"UTF-8") %>
<br>
密码提示问题:<%=new String(request.getParameter("question").getBytes("ISO8859_1"),"UTF-8") %>
<br>
问题答案:<%=new String(request.getParameter("key").getBytes("ISO8859_1"),"UTF-8") %>
<br>
个人爱好:<%
String[] like=request.getParameterValues("like");
for(int i=0;i
<%=new String(like[i].getBytes("ISO8859_1"),"UTF-8")%>
<%
}
%>
body>
html>
request对象获取请求客户端信息
方法 | 返回值 | 说明 |
---|---|---|
getHeader(String name) | String | 返回指定名称的Http头信息 |
getMethod() | String | 获取客户端服务器发送请求的方法 |
getContextPath() | String | 返回请求路径 |
getProtocol() | String | 返回请求使用的协议 |
getRemoteAddr() | String | 返回客户端地址 |
getRemoteHost() | String | 返回客户端主机名称 |
getRemotePort() | int | 返回客户端发出请求的端口号 |
getServletPath() | String | 返回接受客户提交信息的页面 |
getRequestURI() | String | 返回部分客户端请求的地址,不包括请求的参数 |
getRequestURL() | StringBuffer | 返回客户端请求地址 |
实例演示:
创建客户端client.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<ul>
<li>客户端使用协议:<%=request.getProtocol() %>
<li>客户端发送请求方法:<%=request.getMethod() %>
<li>客户端请求路径:<%=request.getContextPath() %>
<li>客户端IP地址:<%=request.getRemoteAddr() %>
<li>客户端主机名称:<%=request.getRemoteHost() %>
<li>客户端端口号:<%=request.getRemotePort() %>
<li>接收客户信息的页面:<%=request.getServletPath() %>
ul>
body>
html>
运行结果为:
客户端使用协议:HTTP/1.1
客户端发送请求方法:GET
客户端请求路径:/MyWebTest
客户端IP地址:0:0:0:0:0:0:0:1
客户端主机名称:0:0:0:0:0:0:0:1
客户端端口号:4999
接收客户信息的页面:/index.jsp
request对象在作用域中管理属性
语法
Object request.setAttribute(String name,Object value)
比如:
request.setAttribute(“date”,new Date());//添加一个属性
演示代码:
<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<%request.setAttribute("date", new Date()); %>
<ul>
<li>获取date属性:<%=request.getAttribute("date") %>
<br>
<%request.removeAttribute("date"); %>
<li>删除之后获取date属性:<%=request.getAttribute("date") %>
ul>
body>
html>
运行结果为:
获取date属性:Sun May 20 10:10:39 CST 2018
删除之后获取date属性:null
cookie是小段的文本信息,通过使用cookie可以标识用户身份、记录用户名及密码、跟踪重复用户。cookie在服务器生成并发送给浏览器,浏览器将cookie的key/value保存到某个指定的目录中,服务器的名称与值可以有服务器端定义。
通过cookie的getCookies()方法可以获取到所有的cookie对象集合,然后通过cookie对象的getName()方法获取到指定名称的cookie,再通过getValue()方法即可获取到cookie对象的值。另外,将一个cookie对象发送到客户端使用了response对象的addCookie()方法。
实例演示:
在index.jsp中读取cookie,在show.jsp中添加cookie
index.jsp
<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<%
String welcome="第一次访问";
String[] info=new String[]{"","",""};
Cookie[] cook=request.getCookies();
if(cook!=null){
for(int i=0;iif (cook[i].getName().endsWith("abcCookInfo")){
info=cook[i].getValue().split("#");
welcome="欢迎回来!";
}
}
}
%>
<%=info[0]+welcome %>
<form action="show.jsp" method="post">
姓名:<input type="text" name="name" value="<%=info[0] %>"/><br>
生日:<input type="text" name="birthday" value="<%=info[1] %>"/><br>
邮箱:<input type="text" name="email" value="<%=info[2] %>"/><br>
<input type="submit" value="提交"/>
form>
body>
html>
show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<%
String name=request.getParameter("name");
String birthday=request.getParameter("birthday");
String email=request.getParameter("email");
/* 将这三个值写到cookie里,也即是添加cookie*/
Cookie myCookie=new Cookie("abcCookInfo",name+"#"+birthday+"#"+email);
response.addCookie(myCookie);
%>
<ul>
<li>姓名:<%=name %>
<li>生日:<%=birthday %>
<li>邮箱:<%=email %>
<li><a href="index.jsp">返回a>
ul>
body>
html>
response对象常用方法
方法 | 返回值 | 说明 |
---|---|---|
addHeader(String name,String value) | void | 添加HTTP文件头,如果同名的头存在,则覆盖 |
setHeader(String name,String value) | void | 设定指定名称的文件并头的值,如果存在则覆盖 |
addCookie(Cookie cookie) | void | 向客户端添加一个cookie对象 |
sendError(int sc,String msg) | void | 向客户端发送错误信息。例如:404网页找不到 |
sendRedirect(String location) | void | 发送请求到另一个指定位置 |
getOutputStream() | ServletOutputStream | 获取客户端输出流对象 |
setBufferSize(int size) | void | 设置缓冲区大小 |
1、重定向
重定向是通过使用sendRedrect()方法,将响应发送到另一个指定的位置进行处理
比如:
response.sendRedirect(“www.baidu.com”);
2、处理HTTP文件头
setHeader()方法通过两个参数–头名称与参数值的方法来设置HTTP头文件。
比如:
设置网页每5秒自动刷新一次
response.setHeader("refresh","5");
设置2秒钟后自动跳转至指定的页面
response.setHeader("refresh","2;URL=welcom.jsp");
session是与请求有关的会话对象,是java.servlet.http.HttpSession对象,用于保存和存储页面的请求信息。
session对象的setAttribute()方法可以实现将信息保存在session范围内,而通过getAttribute()方法可以获取保存在session范围内的信息。
示例:
String sessionMessage="session练习";
session.setAttribute("message",sessionMessage);
String message=(String)session.getAttribute("message");
out.print("保存在session范围内的值为:"+message);
移除指定的绑定对象
removeAttribute(String key)
销毁session
session.invalidate();
application对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象的声明周期更长,类似于“全局变量”。
application对象的常用方法
方法 | 返回值 | 说明 |
---|---|---|
getAttribute(String name) | Object | 通过关键字返回保存在application对象中的信息 |
getAttributeNames() | Enumeration | 获取所有application对象使用的属性名 |
setAttribute(String key,Object obj) | void | 通过指定的名称将一个对象保存在application对象中 |
getMajorVersion() | int | 获取服务器支持的Servlet版本号 |
getServerInfo() | String | 返回JSP引擎的相关信息 |
removeAttribute(String name) | void | 删除application对象中指定名称的属性 |
getRealPath() | String | 返回虚拟路径的真实路径 |
getInitParameter(String name) | String | 获取指定name的application对象属性的初始值 |
程序演示:
在web.xml中配置
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>MyWebTestdisplay-name>
<context-param>
<param-name>urlparam-name>
<param-value>localhost:3306param-value>
context-param>
<context-param>
<param-name>nameparam-name>
<param-value>rootparam-value>
context-param>
<context-param>
<param-name>passwordparam-name>
<param-value>123456param-value>
context-param>
<welcome-file-list>
<welcome-file>index.htmlwelcome-file>
<welcome-file>index.htmwelcome-file>
<welcome-file>index.jspwelcome-file>
<welcome-file>default.htmlwelcome-file>
<welcome-file>default.htmwelcome-file>
<welcome-file>default.jspwelcome-file>
welcome-file-list>
web-app>
在index.jsp中获取application的初始值
<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<form action="show.jsp" method="post">
<%
String url=application.getInitParameter("url");
String name=application.getInitParameter("name");
String password=application.getInitParameter("password");
out.println("URL:"+url);
out.println("Name:"+name);
out.println("Password:"+password);
%>
form>
body>
html>
运行结果为:
URL:localhost:3306
Name:root
Password:123456
总结:
application对象与session对象相同,也可以在application对象中设置属性。与session对象不同的是,session只是当前客户的会话范围内有效,当超过保存时间,session对象就被收回;而application对象在整个应用区域中都有效。application对象管理应用程序环境属性的方法分别介绍如下。
功能:
用JSP实现用户登陆验证的功能。如果用户输入正确的账号密码,则提示文化语句,如果用户输入的错误账号密码,则提示账号密码有误。
<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String str=request.getParameter("username");
String pwd=request.getParameter("pwd");
if(str!=null){
if(str.equals("jim") && pwd.equals("123")){
out.println("你好,jim");
}else{
out.println("您输入的账号密码有误,请重新输入!");
}
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<form action="index.jsp" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="password" name="pwd"><br>
<input type="submit" value="登陆">
form>
body>
html>