HTTP 请求状态码
200:正常
404:资源找不到
400:请求类型不匹配
500:Java 程序抛出异常
response 常⽤⽅法:
1、sendRedirect(String path) 重定向,⻚⾯之间的跳转。
转发 getRequestDispatcher 和重定向 sendRedirect 的区别:request是否改变
转发是将同⼀个请求传给下⼀个⻚⾯,重定向是创建⼀个新的请求传给下⼀个⻚⾯,之前的请求结束⽣命周期。
转发:同⼀个请求在服务器之间传递,地址栏不变,也叫服务器跳转。
重定向:由客户端发送⼀次新的请求来访问跳转后的⽬标资源,地址栏改变,也叫客户端跳转。
自我理解:可以用打电话来区分,转发就是打给1号客服说要转到2号客服,然后客服给转了。重定位是打给1号客服,客服说打错了,然后给了另外的电话,你顺着这个电话再打过去
如果两个⻚⾯之间需要通过 request 来传值,则必须使⽤转发,不能使⽤重定向。
一个例子
转发与重定向区别
转发
forward.jsp
<% request.setAttribute("name","张三"); request.getRequestDispatcher("target.jsp").forward(request,response); %>
结果
重定向
forward.jsp
<% request.setAttribute("name","张三"); response.sendRedirect("target.jsp"); %>
结果
可以看到地址栏变了
还有就是因为request值变了,所以想传过去的参数也不会传到
一个例子
⽤户登录,如果⽤户名和密码正确,则跳转到⾸⻚(转发),并且展示⽤户名,否则重新回到登陆⻚⾯
步骤
1.创造登录界面 login.jsp
<form action="check1.jsp" method="post"> 用户名: <input type="text" name="username"><br/> 密码:<input type="text" name="password"><br/> <input type="submit" value="登录"> </form>
注意的点:
action与method
submit与value
2.在check1里面读取并验证
List<user> list =new ArrayList(); list.add(new user("admin","123123")); String username=request.getParameter("username"); String password=request.getParameter("password"); if(username.equals(list.get(0).getName()) && password.equals(list.get(0).getPassword())){ request.setAttribute("name",username); request.getRequestDispatcher("welcome.jsp").forward(request,response); }else{ response.sendRedirect("login1.jsp"); }
传的参数为什么可以用 getparameter来获取?
在表单中写出变量值 等价于在浏览器地址栏中 ?变量名=