一、scriptlet标签:
通过scriptlet标签我们可以可以在jsp理嵌入java代码;
第一种:<%! %> 可以在里面定义全局变量、方法、类;
第二种:<% %> 可以在里面定义局部变量、编写语句;
第三种:<%= %> 在里面输出一个变量或者一个具体内容;
二、jsp包含指令:
<%@ include file="..." %> 静态包含 先包含,后编译处理
<jsp:include page="..."> 动态包含 先编译处理,后包含
以后开发用动态包含
三、jsp跳转指令:
<jsp:forward>
<jsp:param value="" name="" />
</jsp:forward>
服务器内部跳转,可带参数;
例如:
1 <jsp:forward page="target.jsp"> 2 <jsp:param value="java" name="username"/> 3 <jsp:param value="123456" name="password"/> 4 </jsp:forward> 5 6 target.jsp页面: 7 <body> 8 服务器内部跳转后的页面<br> 9 usename: <%= request.getParameter("username")%> 10 password: <%= request.getParameter("password")%> 11 </body>
还有一种跳转方式:
<% response.sendRedirect("target.jsp")%>
- <jsp:forward />:访问第一个界面,第一个界面调转到第二个界面,第二个界面把内容传送到客户端,客户端浏览器url显示的仍然是第一个界面的名字;跳转过程是发生在服务器端的;客户端感知不到;客户端发起的一个请求,这个请求无声无息的被转到另外一个界面进行处理;这两个界面拿到的request还是同样的、原来的那个request;拿到的request对象是同一个对象。因为就发起了一次请求;
- response.sendRedirect:如果说访问一个界面,这个界面respone.sendRedirect到另外一个界面的话,执行过程是:你访问我这个界面的话,请你重新访问另外一个界面;他会告诉客户端请你在url里面输入另外一个界面的地址,另外一个界面会将内容反馈给你,和客户端有一个来回往复的过程;使用的是不同的request;
四、jsp九大内置对象及四大作用域概述:
1 <body> 2 <% 3 // 设置两个page范围的数据 key-> value 4 pageContext.setAttribute("name","page王二小"); 5 pageContext.setAttribute("age",12); 6 %> 7 <% 8 // 取值 9 String name=(String)pageContext.getAttribute("name"); 10 int age=(Integer)pageContext.getAttribute("age"); 11 %> 12 <font>姓名:<%=name %></font> 13 <font>年龄:<%=age %></font> 14 </body>
2、request范围,只在一个请求中保存数据,javax.servlet.http.HttpServletRequest(接口)
1 <body> 2 <% 3 // 设置两个request范围的数据 key-> value 4 request.setAttribute("name","request王二小"); 5 request.setAttribute("age",12); 6 %> 7 <jsp:forward page="requestTarget.jsp"></jsp:forward> 8 </body> 9 10 requestTarget.jsp页面: 11 <body> 12 <% 13 // 取值 14 String name=(String)request.getAttribute("name"); 15 int age=(Integer)request.getAttribute("age"); 16 // 获取头信息 17 Enumeration enu=request.getHeaderNames(); 18 while(enu.hasMoreElements()){ 19 String headerName=(String)enu.nextElement(); 20 String headerValue=request.getHeader(headerName); 21 %> 22 <h4><%=headerName %> <%=headerValue %></h4> 23 <% 24 } 25 %> 26 <font>姓名:<%=name %></font> 27 <font>年龄:<%=age %></font> 28 </body>
3.session: 再一次会话范围中保存数据,仅供单个浏览器使用,javax.servlet.http.HttpSession(接口)
1 <body> 2 <% 3 // 设置两个session范围的数据 key-> value 4 session.setAttribute("name","session王二小"); 5 session.setAttribute("age",12); 6 %> 7 <h1>session值设置完毕!</h1> 8 </body> 9 10 sessionTarge.jsp: 11 <body> 12 <% 13 // 取值 14 String name=(String)session.getAttribute("name"); 15 int age=(Integer)session.getAttribute("age"); 16 %> 17 <font>姓名:<%=name %></font> 18 <font>年龄:<%=age %></font> 19 </body>
4.application: 在整个服务器上保存数据,所有用户共享,javax.servlet.ServletContext接口
1 <body> 2 <% 3 // 设置两个application范围的数据 key-> value 4 application.setAttribute("name","application王二小"); 5 application.setAttribute("age",12); 6 %> 7 <h1>application值设置完毕!</h1> 8 </body> 9 10 applicationTarget.jsp 11 <body> 12 <% 13 // 取值 14 String name=(String)application.getAttribute("name"); 15 int age=(Integer)application.getAttribute("age"); 16 %> 17 <font>姓名:<%=name %></font> 18 <font>年龄:<%=age %></font> 19 </body>
五、response对象:
response内置对象和request内置对象是对应的;response用于响应客户请求,向客户端输出信息;
javax.servlet.HttpServletResponse接口;
1.自动刷新应用;
2.页面重定向,客户端跳转;
3.操作cookie应用;
自动刷新应用:
1 <body> 2 <% 3 // 每隔一秒刷新一次页面 4 response.setHeader("refresh","1"); 5 // 获取当前时间 6 Date myDate=new Date(); 7 %> 8 当前时间:<%= myDate.toLocaleString() %> 9 </body>
操作cookie,一个简单的登陆页面记录密码:
登陆页:response03.jsp
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <%@ page import="java.util.*"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 8 <title>Insert title here</title> 9 <script type="text/javascript"> 10 function resetValue(){ 11 document.getElementById("userName").value=""; 12 document.getElementById("pwd").value=""; 13 } 14 </script> 15 <% 16 String userName=null; 17 String pwd=null; 18 Cookie[] cookies=request.getCookies(); 19 for(int i=0;cookies!=null &&i<cookies.length;i++){ 20 if(cookies[i].getName().equals("userNameAndPwd")){ 21 userName=cookies[i].getValue().split("-")[0]; 22 pwd=cookies[i].getValue().split("-")[1]; 23 } 24 } 25 26 if(userName==null){ 27 userName=""; 28 } 29 30 if(pwd==null){ 31 pwd=""; 32 } 33 %> 34 </head> 35 <body> 36 37 <form action="userLogin.jsp" method="post"> 38 <table> 39 <tr> 40 <td>用户名:</td> 41 <td><input type="text" id="userName" name="userName" value="<%=userName%>"/></td> 42 </tr> 43 <tr> 44 <td>密码:</td> 45 <td><input type="password" id="pwd" name="pwd" value="<%=pwd %>" /></td> 46 </tr> 47 <tr> 48 <td>记住密码:</td> 49 <td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td> 50 </tr> 51 <tr> 52 <td><input type="submit" value="登录"/></td> 53 <td><input type="button" value="重置" onclick="resetValue()"/></td> 54 </tr> 55 </table> 56 </form> 57 </body> 58 </html>
userLogin.jsp:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>Insert title here</title> 6 </head> 7 <body> 8 <% 9 String userName=request.getParameter("userName"); // 获取用户名 10 String pwd=request.getParameter("pwd"); // 获取密码 11 String remember=request.getParameter("remember"); // 获取记住密码 12 13 if("remember-me".equals(remember)){ 14 Cookie userNameAndPwd=new Cookie("userNameAndPwd",userName+"-"+pwd); 15 userNameAndPwd.setMaxAge(1*60*60*24*7); // cookie记录一个星期 16 response.addCookie(userNameAndPwd); // 保存cookie 17 System.out.println("设置Cookie成功"); 18 } 19 response.sendRedirect("response03.jsp"); 20 %> 21 </body> 22 </html>
六、out对象:
out内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区,所以out内置对象的方法是向客户端输出数据和管理缓冲区,底层javax.servlet.jsp.JspWriter抽象类;
1 <body> 2 <% 3 out.println("<h1>"); 4 out.println("Hello Jsp Servlet"); 5 out.println("</h1>"); 6 %> 7 </body> 8 9 <body> 10 <% 11 int totalbuffer=out.getBufferSize(); // 获取总共缓冲区的大小 12 int available=out.getRemaining(); // 获取未使用的缓冲区的大小 13 int user=totalbuffer-available; // 获取使用的缓冲区大小 14 out.println("总共缓冲区的大小:"+totalbuffer); 15 out.println("未使用的缓冲区的大小:"+available); 16 out.println("使用的缓冲区大小:"+user); 17 %>
七、Config对象
Config内置对象是JSP页面通过jsp容器进行初始化时被传递的对象;javax.servlet.ServletConfig。在Servlet初始化的时候,JSP引擎通过config向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息;
比如web.xml中配置servlet:
1 <servlet> 2 <servlet-name>init</servlet-name> 3 <jsp-file>/sysInit.jsp</jsp-file> 4 <init-param> 5 <param-name>jdbcName</param-name> 6 <param-value>com.mysql.jdbc.Driver</param-value> 7 </init-param> 8 <init-param> 9 <param-name>dbUrl</param-name> 10 <param-value>jdbc:mysql://localhost:3306/db_xx</param-value> 11 </init-param> 12 </servlet> 13 14 <servlet-mapping> 15 <servlet-name>init</servlet-name> 16 <url-pattern>/init</url-pattern> 17 </servlet-mapping>
sysInit.jsp中获取初始化参数:
1 <body> 2 <% 3 String jdbcName=config.getInitParameter("jdbcName"); 4 String dbUrl=config.getInitParameter("dbUrl"); 5 %> 6 <h1>驱动名称:<%=jdbcName %></h1> 7 <h1>连接地址:<%=dbUrl %></h1> 8 </body>
八、exception对象:
Exception内置对象用来处理JSP文件在执行时发生的所有异常,它是java.lang.Throwable类的一个对象。
exception01.jsp:
1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2 <%@ page errorPage="error.jsp"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <% 11 int a=1; 12 int b=0; 13 out.println(a/b); 14 %> 15 </body> 16 </html>
error.jsp:
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <%@ page isErrorPage="true"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 <% 12 if(exception!=null){ 13 out.println("程序错误信息:"); 14 out.println(exception.getMessage()); 15 } 16 %> 17 </body> 18 </html>
访问exception01.jsp页面展示:
九、pageContext对象:
pageContext对象,相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext内置对象由jsp容器创建并初始化,pageContext对象提供了对jsp页面所有对象及控件的访问。
1 <body> 2 <% 3 pageContext.setAttribute("name0", "pageInfo"); 4 request.setAttribute("name1", "requestInfo"); 5 session.setAttribute("name2", "sessionInfo"); 6 application.setAttribute("name3", "applicationInfo"); 7 8 out.println("使用pageContext<br/>"); 9 out.println("page中的属性值:"+pageContext.getAttribute("name0")+"<br/>"); 10 out.println("request中的属性值:"+pageContext.getRequest().getAttribute("name1")+"<br/>"); 11 out.println("session中的属性值:"+pageContext.getSession().getAttribute("name2")+"<br/>"); 12 out.println("application中的属性值:"+pageContext.getServletContext().getAttribute("name3")+"<br/>"); 13 %> 14 </body>