赞
踩
1、掌握常见表单元素的应用和参数值的获取方法;
2、掌握 JSP 的脚本标识;
3、掌握 JSP 主要动作标识。
1、模拟实现用户登录过程。用户在一个登录页面 login.jsp(如图 2-1)输入登
录信息并单击“提交”后,提交给 doLogin.jsp 处理,用以验证用户输入的用户
名、口令与系统的相应信息是否一致,登录成功则转发到文件 ok.jsp,该文件
显示输入的用户名和口令,如图 2-2 所示,失败则转发到文件 error.jsp,显示
“用户名或口令不正确!”。
要求:
(1) 假定用户名和口令分别为 admin 和 123。创建一个 JavaBean–User 类,
该类含有两个属性 username(用户名),password(口令),给每个属性增加相应
的 get 和 set 方法。
使用jsp:useBean动作标识创建 User 类对象;
使用jsp:setProperty来将用户在 login.jsp 中填写的值赋给对象;
使用jsp:getProperty在 ok.jsp 页面中输出结果;
使用jsp:forward实现页面的转发。
(2) 考虑用 request.getParameter()方法获取参数的值,实现(1)的要求。
(3) 假定用户名和口令保存在一个属性文件
src/cn/edu/ahpu/user.properties 中,要求实现(1)的功能。
其中,属性文件内容如下:
username=admin,user1,user2
password=123,pass1,pass2
读取属性文件的测试代码如下:
2、实现用户注册页面 register.jsp(如图 2-3),输入登录信息并单击“注册”
后跳转到页面 doRegister.jsp(如图 2-4),显示“用户名”、“口令”、“性别” 和“爱好”信息。
提示:得到爱好兴趣多选项
String hobbies[]=request.getParameterValues("hobby");
代码详见工程文件
1.1
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <style> input[type=button], input[type=submit], input[type=reset] { background-color: #4CAF50; border: none; color: white; padding: 4px 16px; text-decoration: none; margin: 4px 2px; cursor: pointer; } input[type=text] ,input[type=password]{ width: 15%; padding: 8px 8px; margin: 4px 0; box-sizing: border-box; border: none; background-color: #C0C0C0; color: white; } </style> </head> <body> <form action="doLogin.jsp" method="post"> <%/* form表单,以post方式提交给doLogin.jsp action表示提交总结数据到某个url(文件网页等)。 action="#",“#” 是锚标签,指提交数据到本页 method中,get显示参数,post不显示参数。 get会在网页栏显示信息,数据是公开的,所以相对来说不安全; 另外,地址栏可输入的字符是有限的,所以get能传输的信息相对较少。 */%> 用户名:<input type="text" name="username"><br> <%/*表单提交就是靠着name来识别的,name是可以重复的,多数用于后台获取前台数据,value起到了默认值的作用 */%> 口 令:<input type="password" name="password"><br> <input type="submit" value="登录"> <input type="reset" value="重置"> </form> </body> </html>
doLogin.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<jsp:useBean id="user" class="lumen.User" scope="session"></jsp:useBean>
<%/* id表示定义的JavaBean的唯一标识,class表示定义的JavaBean的类。 定义了一个JavaBean就可以为其属性赋值了 创建lumen.User类的实例user,作用域为session */ %> <%/* 1、application作用域 当指定JavaBean的作用域为application表示在整个项目的生命周期中都有效,服务器重启后失效。 2、session作用域 session作用域表示在当前会话周期内有效,只要仍在当前的会话生命周期内,就可以获取到相应的属性值。 3、request作用域 request作用域表示在当前用户的请求内有效,如果超过了当前请求,则获取不到相应的JavaBean的值。 4、page作用域 page作用域表示只在当前的页面有效,所以不管是请求重定向还是服务器内部转发, 当发生页面跳转时都不能获取到JavaBean的属性值信息。page作用域是jsp:useBean的默认作用域。 */ %> <jsp:setProperty property="*" name="user"/> <%/* <jsp:setProperty>用来设置已经实例化的Bean对象的属性 1.<jps:setProperty name = “JavaBean实例名” property = ”*”/>. *,所有属性类型,在Bean中属性的名字,类型必须和request对象中的参数名称相匹配 2.<jsp:setProperty name = “JavaBean实例名” property = “JavaBean属性名“ /> request对象中的一个参数值来指定Bean中的一个属性值 3.“ value = “BeanValue” value用来指定Bean属性的值 4.param = “request对象中的参数名” param指定用哪个请求参数作为Bean属性的值 */ %> <% if(user.getUsername().equals("admin") && "123".equals(user.getPassword())) request.getRequestDispatcher("ok.jsp").forward(request, response); else request.getRequestDispatcher("error.jsp").forward(request, response); %> <%/* 请求转发: 跳转中不需要携带数据,推荐使用response.sendRedirect()方法 重新定向: 跳转中需要携带数据,推荐使用request.getRequestDispatcher(),共享一个request forward 是服务器端的跳转,从一个java程序转到了另一个java程序,所以此时request会被作为参数传递过去。 sendRedirect 这个是客户端的跳转,服务器端会发送一个跳转的代码和url给浏览器,浏览器会重新请求指定的URL, 此时,request已经无效了。当然,此时session还是生效的。 equals与==的区别 ==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同 ==是指对内存地址进行比较 , equals()是对字符串的内容进行比较 ==指引用是否相同, equals()指的是值是否相同 */ %>
<br>
</body>
</html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
用户名或口令不正确! <br>
</body>
</html>
ok.jsp
<%@ page language="java" import="java.util.*" contentType="text/html" pageEncoding="UTF-8"%> <html> <head> </head> <body> <jsp:useBean id="user" class="lumen.User" scope="session"></jsp:useBean> <jsp:getProperty property="username" name="user"/> <jsp:getProperty property="password" name="user"/> <%/* 获取指定Javabean对象的属性值。 name:JavaBean的对象名,用于指定从哪个JavaBean中获取属性值 property:JavaBean中的属性名,用于指定获取JavaBean中的哪个属性值 只有三个地方的user(实例化对象)名称,属性一致时才可以获取到属性的值 */ %> <br> </body> </html>
src/lumen/User.java
package lumen; public class User { String username; String password; public User(){}//空构造方法 public User(String username, String password) { super(); this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
运行结果
1.2
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: 4px 16px; text-decoration: none; margin: 4px 2px; cursor: pointer; } input[type=text] ,input[type=password]{ width: 15%; padding: 8px 8px; margin: 4px 0; box-sizing: border-box; border: none; background-color: #C0C0C0; color: white; } </style> </head> <body> <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> </body> </html>
doLogin.jsp
<%@page import="lumen.*"%> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <% String name=request.getParameter("username"); String pass=request.getParameter("password"); /*从request中拿出名字叫userName的值,赋给了你刚才定义的变量(name)。 request是负责页面之间传递参数和数据的类,是java封装好的*/ User user =new User(name,pass); //创建User的实例user并给其属性赋值name,pass boolean result="admin".equals(user.getUsername()) && "123".equals(user.getPassword()); //boolean类型变量result当账号密码正确时为true if(result){ session.setAttribute("username", name); session.setAttribute("password", pass); /*getParameter得到的都是String类型的。或者是用于读取提交的表单中的值 (http://a.jsp?id=123中的123),或者是某个表单提交过去的数据; getAttribute()是获取对象容器中的数据值; getAttribute()是获取sessiom的值; getParameter()是获取POST/GET传递的参数值; 可以是对象Object getParameter:用于客户端重定向时,传值用,即用于在用表单或url重定向传值时接收数据用。 getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数, getAttribute只能收到程序用setAttribute传过来的值。 setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去, 当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。 这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。 getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。 */ %> <jsp:forward page="ok.jsp"></jsp:forward> <% }else{ %> <jsp:forward page="error.jsp"></jsp:forward> <%} %> </body> </html>
ok.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <style> tr{ border:2px solid #ccc; } td{ border:2px solid #ccc; } </style> </head> <body> <P style="front-size:20pt;color:blue">This is ok.jsp</P> <table> <tr> <td >用户名:</td> <td><%=session.getAttribute("username")%></td> </tr> <tr> <td>口 令:</td> <td><%=session.getAttribute("password") %></td> </tr> </table> </body> </html>
error.jsp界面同上,共用一个User类
运行结果
1.3
login.jsp界面同上,共用一个User类
doLogin.jsp
<%@page import="lumen.DBTool"%> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <% request.setCharacterEncoding("utf-8"); %> <jsp:useBean id="user" class="lumen.User" scope="session"/> <jsp:setProperty property="*" name="user" /> <% boolean result=DBTool.login(user.getUsername(), user.getPassword()); // Java使用java.util.ResourceBundle类的getBundle()方法读取Properties文件, // 并与输入的用户名,口令对比 if(result){ %> <jsp:forward page="ok.jsp"></jsp:forward> <% } else{ %> <jsp:forward page="error.jsp"></jsp:forward> <%} %> </body> </html>
ok.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <style> tr{ border:2px solid #ccc; } td{ border:2px solid #ccc; } </style> </head> <body> <jsp:useBean id="user" class="lumen.User" scope="session"/> <table> <tr> <td>用户名:</td> <td><jsp:getProperty property="username" name="user"/></td> </tr> <tr> <td>口 令:</td> <td><jsp:getProperty property="password" name="user"/></td> </tr> </table> </body> </html>
error.jsp界面同上
src/lumen/DBTool.java
利用DBTool工具类取出账号密码
package lumen; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; public class DBTool { public static void main(String[] args) { } public static List<User> getUsers(){ List<User> users = new ArrayList<User>(); String propertyFileName = "lumen/user"; ResourceBundle resourceBundle = ResourceBundle.getBundle(propertyFileName); String[] usernames = resourceBundle.getString("username").split(","); String[] passwords = resourceBundle.getString("password").split(","); for (int i = 0; i < usernames.length; i++) { User user = new User(usernames[i],passwords[i]); users.add(user); System.out.println(usernames[i] + "," + passwords[i]); } return users; } public static boolean login(String username,String password){ String propertyFileName = "lumen/user"; ResourceBundle resourceBundle = ResourceBundle.getBundle(propertyFileName); String[] usernames = resourceBundle.getString("username").split(","); String[] passwords = resourceBundle.getString("password").split(","); for (int i = 0; i < usernames.length; i++) if(usernames[i].equals(username) && passwords[i].equals(password)) return true; return false; } }
src/lumen/user.properties
利用.properties文件存放账号密码
运行结果
2
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <style> input[type=button], input[type=submit], input[type=reset] { background-color: #4CAF50; border: none; color: white; padding: 4px 16px; text-decoration: none; margin: 4px 2px; cursor: pointer; } input[type=text] ,input[type=password]{ width: 15%; padding: 8px 8px; margin: 4px 0; box-sizing: border-box; border: none; background-color: #C0C0C0; color: white; } <script> function displayResult(){ var x=document.getElementById("red").name; alert(x); } </script> </style> </head> <body> <form action="doRegister.jsp" method="post"> 账号名:<input type="text" name="username"><br> 密 码:<input type="password" name="password"><br> 性别:<input name="sex" type="radio" value="男">男 <input name="sex" type="radio" value="女" checked="checked">女 <br> 爱好:<input name="hobby" type="checkbox" value="体育" >体育 <input name="hobby" type="checkbox" value="游戏" >游戏 <input name="hobby" type="checkbox" value="网络" >网络 <input name="hobby" type="checkbox" value="读书" >读书<br> <input type="reset" value="重置"> <input type="submit" value="注册"> </form> </body> </html>
doLogin.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%request.setCharacterEncoding("utf-8"); %> <head> <style> tr{ border:2px solid #ccc; } td{ border:2px solid #ccc; } </style> </head> <jsp:useBean id="member" class="lumen.Member" scope="page"> <jsp:setProperty property="*" name="member"/> </jsp:useBean> <table> <tr> <td>用户名:</td> <td><jsp:getProperty property="username" name="member"/></td> </tr> <tr> <td>口 令:</td> <td><jsp:getProperty property="password" name="member"/></td> </tr> <tr> <td>性 别:</td> <td><jsp:getProperty property="sex" name="member"/></td> </tr> <tr> <td>爱 好:</td> <td><% String []hobbies=request.getParameterValues("hobby"); for(String hobby:hobbies) out.println(hobby+" "); %></td> </tr> </table>
src/lumen/Member.java
package lumen; public class Member { private String username; private String password; private String sex; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
运行结果
通过本节用户登录注册等jsp界面设计,我了解了jsp的各种标签的用法,也学习了一些css的样式设置,掌握了一些常见表单元素的应用和参数值的获取方法; 以及JSP 的脚本标识和JSP 主要动作标识。
1、简述 JSP 中 include 指令标识和 include 动作标识的区别和联系。
include 指令标识,作用是将jsp文件,HTML网页文件等其他文本文件静态嵌入当前jsp网页中,静态嵌入是“先包含后处理”,语法格式为<%@ include file=“path” %>
include 动作标识:作用是将jsp文件,HTML网页文件等其他文本文件动态嵌入当前jsp网页中,动态嵌入就是“先处理后包含”语法格式为 <jsp:include page=“url” />
2、什么是 JavaBean,它有什么作用?
Javabean 就是遵循一定标准的类的一个实例,这个类就定义一系列 get 和 set 方法。
Javabean 就是为了和 jsp 页面传数据化简交互过程而产生的,可实现HTML与Java代码的分离,使JSP更易于开发和维护。业务bean用于封装业务逻辑,数据库操作等,数据bean用于封装数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。