【第一个JSP举例】
header.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 here</title> </head> <body> <% out.println("welcome调用这个JSP页面"); %>
footer.jsp
<br> </body> </html>
jsp代码
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ include file="/header.jsp" %><%--包含页头 --%> <%! int i=0; private int count(){ i++; return i; } %> <p>调用count输出<%=count() %></p> <p>调用count输出<%=count() %></p> <br> <%@ include file="/footer.jsp" %><%--包含页底 --%>
【概念总结】
language定义使用的脚本语言
contentType定义jsp字符编码和页面响应的MIME类型
pageEncoding jsp页面的字符编码
scriptlet标签
<%! %>可定义全局变量、全局方法、全局类
<% %>可定义局部变量
<%= %>输出
JSP注释
<!-- -->HTML客户端可见
<%-- --%>客户端不可见
//单行注释
/* 多行注释 */
静态包含
<%@ include file="header.html" %>
<%@ include file="footer.jsp" %>
动态包含
<jsp:include page="header.html" />
<jsp:include page="footer.jsp" />
【jsp九大内置对象】
pageContext request response session application config
out page exception
【四大作用域】
Page范围 只在一个页面中保存数据 抽象类
Request范围 只在一个请求中保存数据 接口
Session范围 在一个会话范围中保存数据,仅供单个用户使用
接口
Application范围 在整个服务器上保存数据,所有用户共享
【Page范围】
<%@ 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> <% pageContext.setAttribute("name","名字"); pageContext.setAttribute("age",24); %> <% String str1=(String)pageContext.getAttribute("name"); int n=(Integer)pageContext.getAttribute("age"); %> <p>姓名:<%=str1 %></p> <p>年龄:<%=n %></p> </body> </html>
【Request范围】
<%@ 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> <% request.setAttribute("name","马云"); request.setAttribute("age",23); request.setAttribute("sex","男"); %> <jsp:forward page="f_target.jsp"></jsp:forward> </body> </html>
<%@ 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> <% String str=(String)request.getAttribute("name"); int age=(Integer)request.getAttribute("age"); String sex=(String)request.getAttribute("sex"); %> <p>姓名:<%=str %></p> <p>年龄:<%=age %></p> <p>性别: <%=sex %></p> </body> </html>
【Session范围】
session保存在服务器中,只要页面不关闭,就可以随时取得
<%@ 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>Session</title> </head> <body> <h3>设置Session</h3> <% session.setAttribute("bookName","JAVA编程"); session.setAttribute("price",25.5); %> </body> </html>
<%@ 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>get Session</title> </head> <body> <% String bookName=(String)session.getAttribute("bookName"); double price=(Double)session.getAttribute("price"); %> <p>图书名称:<%=bookName %></p> <p>图书价格:<%=price %></p> </body> </html>
【Application范围】范围更大,浏览器关闭或者换用其他浏览器,也可以访问数据
<%@ 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>Application</title> </head> <body> <% application.setAttribute("bookName","数据库"); application.setAttribute("price",45.85); %> </body> </html>
<%@ 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>Application</title> </head> <body> <% String bookName=(String)application.getAttribute("bookName"); double price=(Double)application.getAttribute("price"); %> <p>图书名称:<%=bookName %></p> <p>图书价格:<%=price %></p> </body> </html>
知识点:
【获取Request的头信息】jsp引入 枚举
输出 name value
<%@ page import="java.util.*" %> <% Enumeration e=request.getHeaderNames(); while(e.hasMoreElements()){ String name=(String)e.nextElement(); String value=request.getHeader(name); %> <p><%=name %> <%=value %></p> <% } %>
【Response】示例:每隔一秒刷新时间
<% response.setIntHeader("Refresh",1); Date date=new Date(); %> <h3>时间</h3> <%=date.toLocaleString() %>
网页重定向
<h3>网页重定向-客户端跳转</h3> <%--response.sendRedirect("page4.jsp");--%>
<h3>用户登录post</h3> <form action="login.jsp" method="post"> 用户:<input type="text" name="userName" /><br><br> 密码:<input type="password" name="password" /><br><br> 记住我<input type="checkbox" name="remember" value="remember" /><br><br> <input type="submit" value="提交" /> <input type="reset" value="重置" /> </form>
login.jsp的代码
<% String name=request.getParameter("userName"); String pass=request.getParameter("password"); String rem=request.getParameter("remember"); %> <%=name %> <%=pass %> <%=rem %>
post get比较
post放在数据包里-get放在Url后面
get数据量小、不安全
【Cookie示例】用户登录记住用户名和密码
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script> function resetValue(){ document.getElementById("userName").value=""; document.getElementById("password").value=""; } </script> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Test response</title> </head> <body> <% String userName=null; String password=null; Cookie[] cos=request.getCookies(); Cookie c=null; for(int i=0;i<cos.length;i++){ c=cos[i]; if(c.getName().equals("nameAndPass")){ //out.println("保存的用户名和密码"+c.getValue ()); userName=c.getValue().split("-")[0]; password=c.getValue().split("-")[1]; } } if(userName==null){userName="";} if(password==null){password="";} %> <h3>用户登录post</h3> <form action="login.jsp" method="post"> 用户:<input type="text" name="userName" id="userName" value="<%=userName %>"/><br><br> 密码:<input type="password" name="password" id="password" value="<%=password %>"/><br><br> 记住我<input type="checkbox" name="remember" value="remember" /><br><br> <input type="submit" value="提交" /> <input type="button" value="重置" onclick="resetValue()" /> </form> </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="javax.servlet.http.*" %> <!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>login.jsp</title> </head> <body> <% String name=request.getParameter("userName"); String pass=request.getParameter("password"); String rem=request.getParameter("remember"); if("remember".equals(rem)){ Cookie c=new Cookie("nameAndPass",name +"-"+pass); c.setMaxAge(24*60*60*7);//记录一个星期 response.addCookie(c);//保存Cookie } response.sendRedirect("page5_response.jsp"); %> </body> </html>
【out对象】
<%@ 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>Test out</title> </head> <body> <% int total=out.getBufferSize();//总缓存大小 int noUse=out.getRemaining();//未使用缓存大小 int u=total-noUse; %> <p>总缓存大小:<%=total %></p> <p>未使用缓存大小:<%=noUse %></p> <p>已使用缓存大小:<%=u %></p> </body> </html>
【config对象】
config.getInitParameter();//获得xml里的初始化参数param
【exception异常处理】
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page errorPage="ex2.jsp" %> <!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>Exception</title> </head> <body> <% int a=1; int b=0; out.println(a/b); %> </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page isErrorPage="true" %> <!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>isErrorPage</title> </head> <body> <% if(exception!=null){ String str=exception.getMessage(); out.println("错误提示信息:<br>"); out.println(str); } %> </body> </html>
此处需要在浏览器中运行,不在tomcat里运行
【pageContext对象】页面上下文
<% pageContext.setAttribute("name0","pageInfo"); request.setAttribute("name1","requestInfo"); session.setAttribute("name2","sessionInfo"); application.setAttribute("name3","applicationInfo"); out.println("->"+pageContext.getAttribute("name0")+"<br>"); out.println("->"+pageContext.getRequest().getAttribute("name1")+"<br>"); out.println("->"+pageContext.getSession().getAttribute("name2")+"<br>"); out.println("->"+session.getServletContext().getAttribute("name3")+"<br>"); %>