标签:system for success public pen 类型 ext this ast
今天做了一个简单的登录界面,用到了struts框架,属性模型获取用户登录信息
1、新建项目struts,新建login.jsp页面,在根目录的WEB-INF文件夹里新建black文件夹,新建welcome.jsp页面,用于登陆成功后跳转。注:WEB-INF文件夹不能直接访问
1 <body>
2 <form action="logincheck.action" method="post">
3 账户:<input type="text" name="loginid">
4 密码:<input type="password" name="loginpwd">
5 <input type="submit" value="提交">
6 </form>
7 ${message}
8 </body>
2、src目录下新建包com.login.entity,在包下新建类LoginEntity.java
1 public class LoginEntity { 2 private String message; 3 private String loginid; 4 private int loginpwd; 5 6 7 //封装 8 public String getMessage() { 9 return message; 10 } 11 12 public void setMessage(String message) { 13 this.message = message; 14 } 15 16 public String getLoginid() { 17 return loginid; 18 } 19 20 public void setLoginid(String loginid) { 21 this.loginid = loginid; 22 } 23 24 public int getLoginpwd() { 25 return loginpwd; 26 } 27 28 public void setLoginpwd(int loginpwd) { 29 this.loginpwd = loginpwd; 30 } 31 32 public String logincheck(){ 33 if("admin".equals(loginid) && "123".equals(loginpwd)){ 34 System.out.println("登陆成功!"); //在控制台打印,用于检测 35 message="hello"; 36 return "success"; 37 } 38 else{ 39 System.out.println(loginid); 40 System.out.println(loginpwd); 41 42 message="账户或密码输入错误,请重新输入"; //给message赋值 43 System.out.println("登陆失败!"); 44 return "error"; 45 } 46 } 47 }
3、创建Struts2,在src目录下struts.xml中配置
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="logincheck" class="com.login.entity.LoginEntity" method="logincheck">
<result name="success">/WEB-INF/black/welcome.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
action中的method属性的值表示指定方法,如果不指定,就默认execute()方法。
result的name的属性值表示方法中的返回值。如果返回值是success,就跳转到welcome.jsp;返回值是error,则跳转到login.jsp;
4、在浏览器中输入地址,http://localhost:8080/struts/login.jsp
然后输入正确的账户密码,可是它直接跳到了错误页面,即跳回login.jsp页面,并且输出message
这里就出现了问题,多次检查后发现,
LoginEntity.java中的第33行中的判断语句应改为"admin".equals(loginid) && loginpwd==123
然后重新认识了一下equals和==的区别,注:我此处给定的loginid是string类型,loginpwd是int类型
String类非常特殊,此处应用的equals方法是String类的equals()方法。注:很多类有相同的方法名,但可能方法的具体操作不同,可以通过看源码来了解所用的方法。
equals和==的区别:
String类的equals()方法是先判断对象是不是String类型,再找到地址,判断其中的内容是否相同,相同返回true,不同返回false。
而 == 的判断则是判断二者的地址是否相同。
int、String、StringBuffer的区别:
1、声明变量;
String对象被放进常量池里了,再次出现相同的“asd”字符串的时候,JVM把b的引用也指向了"asd"的地址,所以a与b的地址相同;当出现不同的字符串,就得新分配地址空间,所以a与c的地址空间不同。int对象也是如此。
1 public class StringTest {
2
3 public static void main(String[] args) {
4 int aa=8;
5 int bb=8;
6 int cc=9;
7 System.out.println(aa==bb); //打印结果为true
8 System.out.println(aa==cc); //false
9
10 String a="abc";
11 String b="abc";
12 String c="xyz";
13 System.out.println(a==b);//结果为true
14 System.out.println(a==c);//结果为false
15 }
16 }
2、new一个对象:碰到new关键字,都会新划分内存空间,所以地址都会不同。
3、拼接字符串:
int类型:int类型数据始终存储在常量池中。只要不是new的对象,一般都是先在变量池中找是否有相同的值,如果有相同的值,直接将变量指向相同值的地址。
String类型:一旦看到new关键字,JVM会在堆中为String分配空间。即便二者的值是相同的,也要新分配地址。拼接字符串也是新分配地址。
StringBuffer类型:存储跟String的相同,堆。二者不同之处,就是拼接。String类型是新分配地址,并且是将之前的值不变,所以两个变量的值和地址都不同。StringBuffer类型是直接在原地址上拼接,节省内存空间,所以拼接前后的两个变量都指向同一个地址。
//int类型
Integer aaa=new Integer(8);
Integer bbb=new Integer(8);
System.out.println(aaa==bbb); //false
int ccc=aa+2; //衔接上面的代码,aa=8
System.out.println(ccc); //打印结果为10
System.out.println(aa==ccc); //false
System.out.println(aa==aaa); //true
System.out.println(ccc==10); //true
//String类型
String aStr=new String("asd");
String bStr=new String("asd");
System.out.println(aStr==bStr); //false
System.out.println(aStr.equals(bStr));//true
String cStr=bStr+"adad"; //拼接字符串
String dStr=new String();
dStr=bStr+"adad";
System.out.println(cStr==bStr); //false
System.out.println(cStr==dStr);//false
System.out.println(aStr=="asd"); //fasle
//StringBuffer类型
StringBuffer aBuffer=new StringBuffer("A");
StringBuffer bBuffer=new StringBuffer("A");
System.out.println(aBuffer==bBuffer);
StringBuffer aBu = aBuffer.append("ad"); //拼接字符串
System.out.println(aBuffer); //Aad
System.out.println(aBu); //Aad
System.out.println(aBu==aBuffer); //true
bBuffer.append("b");
System.out.println(bBuffer); //Ab
String、StringBuffer、int的地址不同,equals和=的比较不同
标签:system for success public pen 类型 ext this ast
原文地址:http://www.cnblogs.com/lrmsmile/p/7257891.html