JSP-3

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来获取?

在表单中写出变量值 等价于在浏览器地址栏中  ?变量名=

 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/hanabi-521/p/14302169.html