你的username拼错了,在这一行String username=request.getParameter("usernmae");
这个是单run Login.java (这个是继承然后配的web.xml,总之一直网址栏里没有错误)
信息: Server startup in 13103 ms
model.User@2380c3ad
八月 10, 2018 2:59:13 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [Login] in context with path [/XNES] threw exception
java.lang.NullPointerException
at Services.Login.doGet(Login.java:23)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
getRequestDispatcher跳转根目录是当前项目,所以只用/前缀是对的应该,只是拼写难道不是success么。
404控制台是不会报错的。。。
你是用Get方式提交还是Post方式提交?你这个错误很明显就是路径写错了,路径最前面不要有/,表示在当前工程下查找,如图:
这也是比较容易出错的地方,不清楚你是哪里的问题,最好给个截图
视频右下角
路径和web.xml检查下吧
我的意思是, 如果没有这个xml 就自己创建, 这个问题不大, 至于xml 文件前面有两句声明,
以下是一个空的 xml 模板, 去已有的其他xml 文档里面复制都是一样的
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>demo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
这个问题。。。 老师用的肯定不是破解版
找到解决办法了 引用到的CSS样式 都要写成绝对路径 比如src="assets/*.jpg" 就要改为src="<%= path%>/assets/*.jpg" path是根目录上下文 request.getContextPath()
http://www.imooc.com/learn/166,http://www.imooc.com/learn/269
页面右侧的资料下载栏中。
servlet类的service方法会根据请求方式来决定调用doPost方法还是doget方法。
GET是向服务器请求一个页面,而POST是请求向服务器发送数据。
GET也可以发送参数给服务器,不过是加在URL后面,例如href="index.jsp?name=xxx",这样。而且受制于url的长度限制,GET传输的数据量小,安全性低,因为大家都能在地址栏中看见
POST发送的参数是在HTTP请求体中的,在地址栏中是不可见的,安全性较高。而且传输的数据量也没有限制。
emm,这里应该是request.getSession().setAttribute("LoginUser",username);
我没懂你说的是什么意思,最好把代码贴一下。
现在的java开发已经按照一些设计模式进行,例如比较常见的MVC设计模式,在MVC设计模式下,要求将Model层,View层,Controller层独立分开。你说的没错,jsp的确可以通过在页面中嵌套java代码实现servlet的一些功能,但是在这样的设计模式下,使得java开发更加简洁明了,在View的jsp页面通过请求,跳转至位于Controller层的对应的servlet,然后在servlet中经过一系列的业务逻辑的处理,以及操作Model层(连接数据库),将处理后的结果以响应的形式再返回jsp页面,这样就形成了一个简单明了的操作流程。不仅如此,在现在比较流行的SSH(Spring,Struts,Hibernate)和SSM(Spring,SpringMVC,Mybatis)框架中都对MVC的设计模式进行了扩展延伸。而且,在实际操作中,不大会在jsp页面中嵌套java代码。我说的也不是太好,大概就是这个意思,建议多看一些关于MVC设计模式的博客,那些大牛们解释的比我厉害多了。
老师的视频中表单的action是
servlet/LoginServlet
你的是不是多了个com/
这是在session中取的,你看后台代码有保存到了session中没
为了让代码更健壮
复杂程序开发,或者多人协作开发时,不论用哪种提交方式都不会产生错误。
setter提示用户名用的;也就是跳转之后如果再取值的话可以从这取到(getter);视频里最后登录成功没有提示用户名所以不写也行;但是视频开头要求是跳转登录成功页面并提示用户名
!!感觉是两个问题 第一 在比较用户名和密码前要做非空验证,第二你说的不跳转登录成功页面可能是前端的 属性值设置的不正确原因吧 request.getParameter("username"); 检查前台的 name值是否为 username
其实这个问题比较简单,假如用户没有登录成功,那么你的这个方法效率更高,但是假如用户登录成功了那?明显还需要再去创建USER 再去get一次request值,再SET进USER对象,然后才能将这个USER对象放进SESSION,明显效率低一些,那么你觉得用户既然登录了,有那个不愿意一次登录成功喜欢失败几次那。当然这里情况特殊,由于只是实践基础应用,未对登录成功页面传递用户登录的信息,一般来说需要使用SESSION来传递,所以那么写多半还是出于写代码的习惯。
跳转的url地址和web.xml中设定的url_pattern一致
出现空指针的问题可能是由于:1.只是定义了该变量,没有新建。2.先调用了,才新建该对象。
因为那节课中的birthday = sdf.parse(request.getParameter("birthday"));,这句话会抛出异常,所以得包围,这节课没有,所以不用。
有些浏览器对<input type="password" name=""/>会显示出小键盘的
你可以打断点java单步调试一下,可以简单先分析一下:你报500错误,是内部错误,也就是你访问servlet错误,原因是
type Exception report
message java.lang.NullPointerException
和
root cause
java.lang.NullPointerException
空指针异常。
看你部分代码
String username = request.getParameter("username");
String password = request.getParameter("password");
这两句最有可能是异常所发生地方,如果是,你可以检查一下,jsp页面的用户名的name属性和用户名的密码属性,是否是username和password;如果不是,请你单步调试,精准找到报错代码,再解决。
没一个课程视频下方有一个资料下载的区域,哪里可以下载对应课程的所有资料(包含代码),如果课程没有资料区域话,那就是官网没给,没代码的
包不都是放在src文件夹下面么?
那个斜杠是要的,你说错了