炜哥当年的作业1

来源:互联网 发布:mysql key index 区别 编辑:程序博客网 时间:2024/05/16 14:12

炜哥当年给我们讲的时候,哥没有好好听,现在还债了,就让我从一个一个的开始吧。

项目运行结果如下,url为http://localhost:8080/PasswordTest/PasswordInput.jsp


如果头部和尾部拼接的字符串等于练习输入的密码就跳转到成功页面

如果头部和尾部拼接的字符串不等于练习输入的密码就跳转到失败页面


web项目的目录结构如下


前台的PasswordInput的核心代码如下,该JSP用js判断输入的长度不短于3个字符,不长于5个字符,如果输入不符合要求,就在文本框后面显示提示信息

<script type="text/javascript">function validate(form){pwdHead = form.pwdHead.value;pwdEnd = form.pwdEnd.value;if(!minLength(pwdHead,3)){document.getElementById("head").style.color="red";document.getElementById("head").innerHTML="密码头部长度小于3位";form.pwdHead.focus();return  false;}if(!maxLength(pwdHead,5)){document.getElementById("head").style.color="red";document.getElementById("head").innerHTML="密码头部长度大于5位";form.pwdHead.focus();return  false;}if(!minLength(pwdEnd,3)){document.getElementById("end").style.color="red";document.getElementById("end").innerHTML="密码尾部长度小于3位";form.pwdHead.focus();return  false;}if(!maxLength(pwdEnd,5)){document.getElementById("end").style.color="red";document.getElementById("end").innerHTML="密码尾部长度大于5位";form.pwdHead.focus();return  false;}return true;}function minLength(str,length){if(str.length<length)return false;else return true;}function maxLength(str,length){if(str.length>length)return false;else return true;}</script></head><body>  <form name="form1" action="logon" method="post" onsubmit="return validate(form1)">请输入要联系密码的头部和尾部:<br />密码头部:<input type="text" name="pwdHead" /><span id="head"></span><br />密码尾部:<input type="text" name="pwdEnd" /><span id="end"></span><br />练习输入密码:<input type="password" name="pwd" /><br /><input type="submit" value="提交" /> <input type="reset" value="重置" /> </form>
对应的success.jsp代码如下,error.jsp代码和success页面一样,不赘述

<body>您练习输入的密码错误!<br />输入的密码头部为:${requestScope.pwdHead }${param.pwdHead} <br />输入的密码尾部为:${requestScope.pwdEnd }${param.pwdEnd}<br />您练习输入的密码为:${requestScope.pwd }    ${param.pwd}<br /></body>
处理密码是否相等的Java类
package com.bean;public class PasswordCheckUserBean {public boolean equals(String pwd1,String pwd2){if(pwd1.equalsIgnoreCase(pwd2)) return true;else return false;}}
处理表单的servlet

package com.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.bean.PasswordCheckUserBean;public class PasswordTestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest reqest, HttpServletResponse response)throws ServletException, IOException {reqest.setCharacterEncoding("gb2312");response.setContentType("text/html;charset=gb2312");String pwdHead = reqest.getParameter("pwdHead");String pwdEnd = reqest.getParameter("pwdEnd");String pwd = reqest.getParameter("pwd");PasswordCheckUserBean checkUserBean = new PasswordCheckUserBean();if (checkUserBean.equals(pwdHead+pwdEnd, pwd)) {reqest.getRequestDispatcher("/common/success.jsp").forward(reqest, response);} else {reqest.getRequestDispatcher("/common/failure.jsp").forward(reqest, response);}}@Overrideprotected void doPost(HttpServletRequest reqest, HttpServletResponse response)throws ServletException, IOException {doGet(reqest, response);}}

虽然这是一个非常简单的jsp+servlet入门的项目,以前写过,现在在写,感觉温故而知新,总结如下

1.此项目中对于跳转页面采用的是转发的方式,那么对于suceess.jsp,采用request.getRequestDispatcher("")的字符串应该是/开始,表示相对于项目的路径,因为它的默认路径是http://localhost:8080/PasswordTest,所以写法为("/common/success.jsp")而如果采用response.sendRedirect("")应该是没有/,因为response的写法相对于原来的url是http://localhost:8080/PasswordTest/,,如果采用相对路径,应该是("./common/failure.jsp"),这个都可以用

2.我么知道采用重定向和转发两种方式都可以实现跳转,但是此处是不是都可以用了?其实不然,如果知道重定向和转发的区别,你就会知道重定向是一次新的请求,那么当使用这种方式时,所传的参数会全部丢失,而是用转发,还是一次请求,数据会保留,这就是为什么此处用的是转发而非重定向

3.虽然不是这次犯的错误,但是我感觉还是必要总结一下,java中判断两个字符串的值是否相等应该是是用String.equals()方法,这样说大家都会,但是有一次头脑发晕,居然写成了==(在c#中是==,另外在js中也是==),当时没注意,居然纳闷为什么没有跳到if(str1==str2){}中去,后来发现了应该是equals方法,但是为什么是这样?因为在java中因为String是引用类型,对于Object类我们知道==和equals方法都是判断两个对象的地址是否是一个,这个没有任何问题,但是由于String类重写了父类Object的equals方法,导致String类的==是判断是否是同一个对象,equals是判断两个字符串的值是否相等,切勿再犯这种低级错误。

4.另外原来不会写在文本框后面写提示信息,都是弹出一个alert框,但是老师当时说不友好,但是又不会,现在会了,所以注意下,就是document.getElementById("head").style.color="red";但是有没有什么好的方法能够知道是这样写,我原来写成了document.getElementById("head").color="red";或者写不对,我怎么能知道是style下的直接color属性,而不是style.xxx.color,难道是需要看API文档吗,望大牛解惑?



如果文章有什么错误或者有什么建议,欢迎提出,大家共同交流,一起进步

文章转载请注明出处,请尊重知识产权



0 0