你的userDAO的实例名字是loginuserDAO,下面的方法调用应该是loginuserDAO而不是userDAO
是啊 public 默认构造方法 无变量 里面是写的逻辑
还有就是建议你使用idea编译器,没有用到的变量和方法会用虚线标识出来,如果你整个项目写完,发现还有虚线说明那个变量或方法始终都没用过
java bean的类【必须】放在package里!不能直接放在source下!所以这就是为什么老师的User和UserDao都分别放在com.po和com.dao里
<td colspan="2" align="center"> <input type="submit" value="登录" /> </td> align是设置对齐方式的,提交按钮只要把type设置成submit就是提交按钮了,value是提交按钮上显示的文字
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
代码乱了。重发
虚拟路径而已不重要,只需要知道有这么回事,会改写就可以了。他没改写一般是第一次创建一个WEB项目,改写的是复制之前的web项目,他复制的改了WEB名。但是没有改写项目发布后的URL,如果两个项目的URL都是一样,那么电脑就不知道你启用的是那个WEB项目。个人理解。不知道你懂了没。。。
不是这个page当然只对本页面有效,但是老师使用了一个session内部对象
session.setAttribute("loginUser", loginUser.getUsername());
这个代码让这个名字变成了一个session对象,然后有调用了session对象的方法。而且这个转发之后其实这个也面中的信息全部被清除了,但是这个名字已经成为了session对象,所以他会被保留下来。
设置一下字符集
选择项目的properties->搜索Deployment Assembly->修改右边的Web content root即可
现在只用了model1模式,只用了jsp与javabean ,应该是还没讲到那,你都超纲啦哈哈
使用习惯问题吧,其实效果都一样。
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <jsp:useBean id="userDao" class="dao.UsersDao" scope="page"></jsp:useBean> <jsp:useBean id="loginUser" class="po.Users" scope="page"></jsp:useBean> <jsp:setProperty name="loginUser" property="*"></jsp:setProperty> <% request.setCharacterEncoding("utf-8");//防止中文乱码 //如果用户和密码都等于admin,则登录成功 if(userDao.usersLogin(loginUser)) { session.setAttribute("loginUser",loginUser.getUsername()); request.getRequestDispatcher("login_success.jsp").forward(request, response); } else{ response.sendRedirect("login_failure.jsp"); } %>
以上这是dologin.jsp中修改后的代码。
这一章的项目使用了jsp+javaBean的模型来写(没有用到数据库,账号密码用静态数据模拟了)
<jsp:useBean id="userDao" class="dao.UsersDao" scope="page"></jsp:useBean> <jsp:useBean id="loginUser" class="po.Users" scope="page"></jsp:useBean>
首先,这两句代码使用了jsp动作元素创建了两个javaBean,相当于java中new一个对象的操作,id属性的值就是对象名。(new一个对象出来就能使用这个对象的成员变量和成员方法,这个你应该知道吧?)
<jsp:setProperty name="loginUser" property="*"></jsp:setProperty>
然后这一句是将前台登陆页面提交的表单信息赋值给loginUser这个javaBean中的属性,这个jsp动作元素不知道的话建议你再看下这个视频http://www.imooc.com/video/3965
if(userDao.usersLogin(loginUser)) { session.setAttribute("loginUser",loginUser.getUsername()); request.getRequestDispatcher("login_success.jsp").forward(request, response); }
这个就是对表单提交的账号密码的判断了,其中“userDao.usersLogin(loginUser)”这个方法来自UserDao这个类。上面已经用<jsp:userBean>这个动作元素new出来了,对象名是userDao。
接下来就是些重定向的操作,看懂了吗?
讲到极细就到底层去了。。
用户名是空的
我认为是:首先UserDao类中没有属性,所以getter和setter方法不写。然后其实应该是有一个共有的无参的构造方法,但是楼上说的一样,如果没有构造方法,默认会补充一个共有的无参的构造方法,所以说是一个javabean类。其实应该加上那个共有的无参的构造方法,更清晰一点,虽然你知道它是个javabean。
用这个一定要注意!表单里的属性要和你实例化的对象的setget的名字要相同!!!!
因为scope是page 范围的,离开这个页面就不会把值传过去
我的代码感觉也没错啊就是一直失败
当然可以用数据库连接,等你去企业做项目的时候全部都是连接的数据库。
感觉是项目建错了吧,感觉应该建一个Dynamic Web Project,然后com.po包放到src里面,index.jsp和test2.jsp放到Web Content里面
<jsp:setProperty property="*" name="User"/>
这个property是指javaBean的属性
需要去设置里设置
视频下面有源码可以下载
useBean动作就是实例化一个JavaBean,起个ID就一一对应了,而userDAO.userslogin()方法的参数是Users类的实例。相当于把之前放在JSP里面的业务逻辑放在了Java类里
现实中可能不会这样写代码吧。。。
为了将用户名放在session的属性中,传递给login_success.jsp页面去显示用户名。
前端基础没看吧,先学HTML+CSS+JS