request内置对象拥有HttpServletRequest接口所有的方法,主要方法如下
方法名作用setCharacterEncoding(String charset)设置请求的编码集getParameter(String name)根据指定参数获得单一的参数值String [] getParameterValues(String name)根据参数名获得一组参数值setAttribute(String name,String value)以键值对的形式存储请求域的值getAttribute(String name )根据属性名获取存储的对象数据代码演示request的作用 NewFile.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <form action="doNewFile.jsp" method="post"> <table> <tr> <td>用户名</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>密码</td> <td><input type="password" name="userpass" /></td> </tr> <tr> <td>性别</td> <td><input type="radio" name="sex" value="男" />男 <input type="radio" name="sex" value="女" />女</td> </tr> <tr> <td>爱好</td> <td><input type="checkbox" name="hobby" value="篮球" />篮球 <input type="checkbox" name="hobby" value="足球" />足球 <input type="checkbox" name="hobby" value="排球" />排球 <input type="checkbox" name="hobby" value="唱歌" />唱歌</td> </tr> <tr> <td><input type="submit" name="submit" value="登录" /></td> <td></td> </tr> </table> </form> </body> </html>在服务上访问该jsp页面 doNewFile.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>获取的信息</title> </head> <body> <% //设置post的请求编码集 request.setCharacterEncoding("utf-8");//只对post请求起作用 //获得用户名的值 String name = request.getParameter("username"); out.println("用户名是"+name+"<br>"); //获得密码 String pass = request.getParameter("userpass"); out.println("密码是"+pass+"<br>"); //获得性别 String sex = request.getParameter("sex"); out.println("性别是"+sex+"<br>"); //获得爱好 String[] hobby = request.getParameterValues("hobby"); out.print("用户的爱好是:"); for(String h: hobby){ out.print(h); } %> </body> </html>提交表单后,doNewFile.jsp的运行结果是
加入登录验证,利用setAttribute()方法 NewFile.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% String info = (String)request.getAttribute("info"); if(info!=null){ out.print("<font size=4 color = red>"+info+"</font>"); } %> <form action="doNewFile.jsp" method="post"> <table> <tr> <td>用户名</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>密码</td> <td><input type="password" name="userpass" /></td> </tr> <tr> <td>性别</td> <td><input type="radio" name="sex" value="男" />男 <input type="radio" name="sex" value="女" />女</td> </tr> <tr> <td>爱好</td> <td><input type="checkbox" name="hobby" value="篮球" />篮球 <input type="checkbox" name="hobby" value="足球" />足球 <input type="checkbox" name="hobby" value="排球" />排球 <input type="checkbox" name="hobby" value="唱歌" />唱歌</td> </tr> <tr> <td><input type="submit" name="submit" value="登录" /></td> <td></td> </tr> </table> </form> </body> </html>doNewFile.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>获取的信息</title> </head> <body> 欢迎进入主页面 <% //设置post的请求编码集 request.setCharacterEncoding("utf-8");//只对post请求起作用 //获得用户名的值 String name = request.getParameter("username"); out.println("用户名是"+name+"<br>"); //获得密码 String pass = request.getParameter("userpass"); out.println("密码是"+pass+"<br>"); StringBuffer sb = new StringBuffer(); if("".equals(name)){ sb.append("用户名不能为空"); } if("".equals(pass)){ sb.append("密码不能为空"); }else{ if(pass.length()>6||pass.length()>12){ sb.append("密码的长度因该在6到12位之间"); } } request.setAttribute("info", sb.toString()); if(sb.toString().equals("")){ %> <jsp:forward page="main.jsp"></jsp:forward> <% }else{ %> <jsp:forward page="NewFile.jsp"></jsp:forward> <% } %> </body> </html>main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>主页面</title> </head> <body> <font size = 6 color =red>欢迎进入主页面</font> </body> </html>结果
当用户名为空时用户名不为空值,进入主页面
注: 从上面的输出结果可以看出,利用< jsp:forword>实现转发时地址栏的地址是不变的!!!
response内置对象拥有HttpServletResponse接口所有的方法,主要方法如下
方法名作用setCharacterEncoding(String charset)设置响应的编码集sendRedirect (String URL)重定向到指定的url地址所指的资源代码实现response NewFile.jsp ,main.jsp[和上面的代码一样,这里不再详细的写出
doNewFile.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>获取的信息</title> </head> <body> 欢迎进入主页面 <% //设置post的请求编码集 request.setCharacterEncoding("utf-8");//只对post请求起作用 //获得用户名的值 String name = request.getParameter("username"); out.println("用户名是"+name+"<br>"); //获得密码 String pass = request.getParameter("userpass"); out.println("密码是"+pass+"<br>"); StringBuffer sb = new StringBuffer(); if("".equals(name)){ sb.append("用户名不能为空"); } if("".equals(pass)){ sb.append("密码不能为空"); }else{ if(pass.length()>6||pass.length()>12){ sb.append("密码的长度因该在6到12位之间"); } } request.setAttribute("info", sb.toString()); if(sb.toString().equals("")){ response.sendRedirect("mian.jsp"); }else{ response.sendRedirect("NewFile.jsp"); } %> </body> </html>页面的显示效果
注: 这是发现地址栏中的地址发生了变化,这就是重定向和转发的区别之一
out内置对象主要方法如下
方法名作用print/println(参数)输出newLine()输出一个换行符clear()清除输出缓冲区的内容,若缓存区的内容为空,则产生IOException异常clearBuffer()清除输出缓冲区的内容,若缓存区的内容为空,不会产生IOException异常getBufferSize()获得当前缓冲区的大小代码演示
<%@page import="java.util.Date"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>输出演示</title> </head> <body> <% Date date = new Date(); String name = "哼哼的博客"; out.print(date.toString()+"<br>"); out.print(name+"<br>"); for(int i=1;i<1000;i++){ out.print("*"); out.flush();//如果没有flush这个方法,当输出流内容超过1KB时,页面将不能正常执行。 } %> </body> </html>页面显示效果
session内置对象具有HttpSession接口的所有方法,主要方法如下
方法名作用setAttribute(String name,Object value)以键值对的形式存储session域属性getAttribute(String name)根据属性名获取属性值invalidate()使session对象失效,释放所有的属性空间clearBuffer()清除输出缓冲区的内容,若缓存区的内容为空,不会产生IOException异常getBufferSize()获得当前缓冲区的大小下面代码演示登录成功后对用户名的保存。 login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% String info = (String)request.getAttribute("info"); if(info!=null){ out.print("<font size=4 color = red>"+info+"</font>"); } %> <form action="doLogin.jsp" method="post"> <table> <tr> <td>用户名</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>密码</td> <td><input type="password" name="userpass" /></td> </tr> <tr> <td>性别</td> <td><input type="radio" name="sex" value="男" />男 <input type="radio" name="sex" value="女" />女</td> </tr> <tr> <td>爱好</td> <td><input type="checkbox" name="hobby" value="篮球" />篮球 <input type="checkbox" name="hobby" value="足球" />足球 <input type="checkbox" name="hobby" value="排球" />排球 <input type="checkbox" name="hobby" value="唱歌" />唱歌</td> </tr> <tr> <td><input type="submit" name="submit" value="登录" /></td> <td></td> </tr> </table> </form> </body> </html>doLogin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>获取的信息</title> </head> <body> 欢迎进入主页面 <% //设置post的请求编码集 request.setCharacterEncoding("utf-8");//只对post请求起作用 //获得用户名的值 String name = request.getParameter("username"); //将用户名保存session的作用域中 session.setAttribute("name", name); //获得密码 String pass = request.getParameter("userpass"); StringBuffer sb = new StringBuffer(); if("".equals(name)){ sb.append("用户名不能为空"); } if("".equals(pass)){ sb.append("密码不能为空"); }else{ if(pass.length()>6||pass.length()>12){ sb.append("密码的长度因该在6到12位之间"); } } request.setAttribute("info", sb.toString()); if(sb.toString().equals("")){ response.sendRedirect("main.jsp"); }else{ response.sendRedirect("login.jsp"); } %> </body> </html>main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>主页面</title> </head> <body> <font size = 6 color =red>欢迎进入主页面</font><br> <%String name =(String) session.getAttribute("name"); out.print("<font size=5 color=green>用户名是:"+name+"</font>"); %> </body> </html>页面显示效果
从结果中可以看出存储在session中的属性,在重定向之后也有效。
application具有ServletContext接口的所有功能,主要的方法如下
方法名作用setAttribute(String name,Object value)以键值对的形式存储session域属性getAttribute(String name)根据属性名获取属性值removeAttribute(String name)移除属性下面用代码使用application对象实现一个页面的留言板功能 guestBook.jsp
<%@page import="java.util.Vector"%> <%@page import="java.util.ArrayList"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>留言板</title> </head> <script type="text/javascript"> function vaildate(){ var name = document.getElementById("username"); var message = document.getElementById("message"); if(name.value==""){ alert("请输入你的名字"); name.focus(); return false; }else if(message.value==""){ alert("请输入你的留言"); message.focus(); return false; } return true; } </script> <body> <p>请输入留言</p> <form action ="guestBook.jsp" method="post" onsubmit="return validate"> <p>请输入名字: <input type = "text" name = "username" id = "username"/></p> <p>请输入留言: <textarea name = "message" id = "message"cols="50" rows="3"></textarea></p> <p><input type="submit" value ="发表留言"/></p> </form> <hr> <p>留言板内容</p> <% response.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8"); String name = request.getParameter("username"); String message = request.getParameter("message"); Vector<String> messages = new Vector<>(); if(messages==null){ //若留言本不存在则创建一个 messages = new Vector<String>(); } if(name!=null&&message!=null){ //将名字和留言的内容拼接起来 String info = name+"#"+message; //将拼接的内容放到容器中 messages.add(info); //设置Application域的属性 application.setAttribute("messageBook", messages); } //遍历显示所有的留言信息 if(messages.size()>0){ for(String m :messages){ //以#拆分信息 String[] arr = m.split("#"); out.print("<p>姓名:"+arr[0]+"<br>留言内容:"+arr[1]+"</p>"); } }else{ out.print("还没有留言"); } %> </body> </html> 没留言是的效果图 留言之后主要的方法
方法名作用setAttribute(String name,Object value)以键值对的形式存储session域属性getAttribute(String name)根据属性名获取属性值removeAttribute(String name)移除属性getRequest()获取当前jsp页面的请求对象getResponse()获取当前jsp页面的响应对象geSession()获取当前jsp页面的session对象代码演示
<% pageContext.setAttribute("name", "哼哼的博客"); String pname = (String)pageContext.getAttribute("name"); %> <%=pname %>当前jsp页面翻译后的Servlet的ServletConfig对象 代码演示
<?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>WebFirstDemo</display-name> <servlet> <servlet-name>configExample</servlet-name> <jsp-file>configExample.jsp</jsp-file> <init-param> <param-name>username</param-name> <param-value>hengheng</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>configExample</servlet-name> <url-pattern>/configExample.jsp</url-pattern> </servlet-mapping> </web-app> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%String name = config.getInitParameter("username");%> <%=name %> </body> </html>如果一个jsp页面要应用此对象,必须将此页面中page指令的IsErrorPage属性设置为true,否则无法编译
代码演示 error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%exception.printStackTrace(response.getWriter()); %>> </body> </html>calculate.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="error.jsp" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% int a,b; a=10; b=0; int c = a/b; %> </body> </html>运行calculate.jsp的结果是
页面上打印都是报错信息。
