JSP编程-步步为营

【第一个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" %><%--包含页底 --%>

  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"  

value="<%=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="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里运行

JSP编程-步步为营

【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>");
%>