赞
踩
1、掌握表单提交及页面间参数传递的方法。
2、理解页面转发与重定向之间的区别。
3、掌握 request、session 和 application 等内置对象的常用 API。
1、对实验二的内容进行扩展,编写以下 JSP 文件。
(1) login.jsp:登录页面,如下图所示。
(2) doLogin.jsp:登录处理页面,假定合法的用户名均以“ahpu_”开头且长度介于 6 至 12,
密码均为“123”。若用户名或密码不正确则显示错误信息,否则重定向到 messageBoard.jsp。
(3) messageBoard.jsp:留言板页面,如下图所示。输入留言标题和留言内容,点击提交,转
发到 showMessage.jsp。
(4) showMessage.jsp:显示所有留言页面,如下图所示。
要求:
(1) 登录成功后将用户名(即留言者)存于 session 下的某个 key 中,以便后面取出。
(2) messageBoard.jsp 必须含有登录检查逻辑,以防止用户通过地址栏直接访问该页面。
(3) 注意对留言标题、内容等表单参数中可能输入的特殊字符进行转义,如<、>、”分别转
义为<、>、"。
(4) 创建 Message 类用于封装留言信息,字段包括留言者、标题、内容、时间。
(5) 提交留言后将创建的 Message 对象添加到 application 下的某个 key 中(其对应 value 为
List 对象)。
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <style> input[type=button], input[type=submit], input[type=reset] { background-color: #4CAF50; border: none; color: white; padding: 6px 16px; text-decoration: none; margin: 6px 2px 0px; cursor: pointer; } input[type=text] ,input[type=password]{ width:60%; padding: 8px 8px; margin: 6px 2px; box-sizing: border-box; border: none; background-color: #C0C0C0; color: white; } div { width: 30%; border:2px solid green; background-color: #f2f2f2; padding: 10px; } </style> </head> <body> <div> <form action="doLogin.jsp" method="post"> 用户名:<input type="text" name="username"><br> 口 令:<input type="password" name="password"><br> <input type="submit" value="登录"> <input type="reset" value="重置"> </form> </div> </body> </html>
doLogin.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String name=request.getParameter("username");
String pass=request.getParameter("password");
if(name.startsWith("ahpu_") && name.length()>=6 && name.length()<=12 && pass.equals("123")){
session.setAttribute("username",name);//值为“username”的name传入session
response.sendRedirect("messageBoard.jsp");
}else
out.print("用户名或者密码错误!");
%>
messageBoard.jsp
利用存入session的username属性是否为困判断是否登录,未登录,重定向到登录界面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> </head> <style> input[type=text], select { width: 95%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } input[type=submit] { width: 20%; background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; border-radius: 4px; cursor: pointer; } input[type=submit]:hover { background-color: #45a049; } div { width: 60%; border:2px solid green; background-color: #f2f2f2; padding: 40px; border-radius:25px; } </style> <body> <% if(session.getAttribute("username") == null )//未登录用户,返回登录界面 response.sendRedirect("login.jsp"); %> <div> <form action="doMessage.jsp" method="post"> 标题:<br> <input type="text" name="title" placeholder="请填写标题"><br> 内容 :<br> <textarea name="content" rows="5" cols="73"></textarea><br> <input style="float:right" type="submit" value="提交"> </form> </div> </body> </html>
doMessage.jsp
<%@page import="lumen2.Message"%> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% request.setCharacterEncoding("utf-8"); //获取Messagae对象的属性 String title=request.getParameter("title");//request获取title属性的值 String content=request.getParameter("content");//request获取content属性的值 String name=session.getAttribute("username").toString(); //把一个 Number 对象转换为一个字符串,并返回结果,session中获取session的值 Date createTime= new Date();//系统获取时间 Message message=new Message(); //调用Message属性的set方法,将上面获得的值传入 message.setName(name); message.setTitle(title); message.setContent(content); message.setCreateTime(createTime); List<Message> list=(List<Message>)application.getAttribute("messagelist"); //创建类型为Message的集合,将application中获得的messagelist传入list中, //没有messagelist时,传入list的值为null if(list==null) //说明还没有留言 list=new ArrayList<Message>(); list.add(message); application.setAttribute("messagelist", list); //将list存入application response.sendRedirect("showMessage.jsp");//重定向 %>
showMessage.jsp
利用for循环和html表格,将内容输出
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="lumen2.Mytools"%>
<%@page import="java.util.List"%>
<%@page import="lumen2.Message"%>
<html> <head> <style> table { border-collapse: collapse; width:70%; } table, td, th { border:2px solid black; } th { background-color:green; color:white; height:35px; } td{ text-align:center; vertical-align:center; height:30px; background-color:#C0C0C0; } </style> </head> <body> <% List<Message> list=(List<Message>)application.getAttribute("messagelist"); //取出留言list %> <table > <tr> <th> # </th> <th>用户</th> <th>标题</th> <th>内容</th> <th>编辑日期</th> </tr> <% for(int i=0;i<list.size();i++){ Message message=list.get(i); %> <tr> <td><%=i+1 %></td> <td><%=message.getName() %></td> <td><%=Mytools.change(message.getTitle()) %></td> <td><%=Mytools.change(message.getContent()) %></td> <td><%=message.getCreateTime().toLocaleString() %></td> </tr> <%} %> </table> </body> </html>
Mytools.java
工具类,将转义字符替换
package lumen2;
public class Mytools {
public static String change(String str){
str=str.replace("<","<");
str=str.replace(">",">");
str=str.replace("&","&");
str=str.replace("'","'");
str=str.replace("\"",""");
//转义字符
return str;
}
}
Message.java
package lumen2; import java.util.Date; public class Message { private String name; private String title; private String content; private Date createTime; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } }
实验结果
简述转发与重定向的区别和联系。
请求转发: 跳转中不需要携带数据,推荐使用response.sendRedirect()方法
重新定向: 跳转中需要携带数据,推荐使用request.getRequestDispatcher(),共享一个request。
forward 是服务器端的跳转,从一个java程序转到了另一个java程序,所以此时request会被作为参数传递过去。
sendRedirect 这个是客户端的跳转,服务器端会发送一个跳转的代码和url给浏览器,浏览器会重新请求指定的URL,此时,request已经无效了。当然,此时session还是生效的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。