### JSP Servlet+JSP Servlet 主要负责完成与客户端的数据交互,提供业务数据。 JSP 负责视图层的展示工作。 Servlet 接收到客户端请求,根据具体的需求完成相关业务,同时将业务数据传给 JSP,JSP 对业务数据进行解析。 JSP HTML 页面中可以嵌入 Java 代码。 1、JSP 脚本 ```java <% Java代码 %> ``` 2、JSP 声明 ```java <%! 声明一个全局方法 %> ``` 3、JSP 表达式 ```java <%=Java变量%> ``` ### JSP 内置对象 request、response、pageContext、session、application、config、out、page、exception 常用的 pageContext、request、response、session、application request: - String getParameter(String key) - void setAttribute(String key,Object value) - Object getAttribute(String key) - void setCharacterEncoding(String charset) - String[] getParameterValues(String key) - RequestDispatcher getRequestDispatcher(String path) response: - sendRedirect(String path) //重定向 转发表示将同一个请求在服务端进行转移,相当于你给客服打电话,客服将你的电话转接给售后。 重定向表示让客户端发送一个新的请求来访问跳转之后的页面,相当于你给客户打电话,客服给你一个新的电话号码,让你给新号码打电话。 转发的特点是地址栏的 URL 不变,因为是同一次请求,服务器跳转,在服务端完成资源的跳转。 重定向的特点是地址栏的 URL 会发生改变,因为是两次不同的请求,客户端跳转,相当于从客户端发起一次新的请求。 重定向的弊端在于 request 中保存的数据无法读取,因为重定向是两次不同的请求,意味着 request 是两个不同的对象。 ### 会话 为什么要有会话? 服务端可以接收若干个客户端请求,但是服务端无法识别每一次 HTTP 请求是从哪个客户端发送来的,它只会接收到一个请求信号。 所以需要一种技术来区分不同的客户端,这个技术就是会话。 会话:就是客户端和服务端之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程。 举例:会话就相当于打电话的过程,拿起电话拨通号码进行对话,直到挂掉电话的整个操作过程,就是一次会话。 会话状态指服务端和客户端在会话过程中产生的状态信息,借助于会话状态,服务端能够把属于同一次会话的一系列请求和响应过程关联起来。 实现会话机制有两种解决方案 - session - cookie 服务端同时接收大量的客户端请求,如何来区分哪些请求来自于同一个会话?能识别出来自同一个客户端的访问请求,这就需要客户端对其发出的每个请求进行标识,属于同一个会话中的请求都有相同的标识号,这就是 sessionID。 session 常用方法: - String getId() //获取sessionID - void setMaxInactiveInterval(int interval) //设置 session 失效时间,单位是秒 - int getMacInactiveInterval() //获取 session 时间 - void setAttribute(String key,Object value) //在 session 中以键值对的形式存储数据 - Object getAttribute(String key) //通过 key 值获取 session 中保存的数据 - void removeAttribute(String key) //通过 key 值移除 session 中保存的数据 实际开发中,普通的业务数据传递一般选择 request,需要结合转发完成资源的跳转。登录成功之后的用户信息,一般选择 session,无论是转发还是重定向,没有区别,都可以从 session 中取出数据。
index.jsp
<%@ page import="java.util.Map" %> <%@ page import="java.util.Set" %> <%@ page import="java.util.Arrays" %> <%@ page import="java.util.Enumeration" %><%-- Created by IntelliJ IDEA. User: southwind Date: 2019-07-07 Time: 20:10 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <% String username = request.getParameter("username"); String password = request.getParameter("password"); if(username.equals("zhangsan")&&password.equals("123")){ request.setAttribute("name",username); // response.sendRedirect("welcome.jsp"); request.getRequestDispatcher("welcome.jsp").forward(request,response); }else{ request.setAttribute("error","用户名或密码错误"); // response.sendRedirect("login.jsp"); request.getRequestDispatcher("login.jsp").forward(request,response); } %> <h1>index</h1> </body> </html>
login.jsp
<%-- Created by IntelliJ IDEA. User: southwind Date: 2019-07-07 Time: 20:48 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String error = (String) request.getAttribute("error"); if(error!=null){ out.write(error); } %> <form action="index.jsp"> <table> <tr> <td>用户名:</td> <td> <input type="text" name="username"/> </td> <td>密码:</td> <td> <input type="password" name="password"/> </td> <td> <input type="submit" value="登录"/> </td> </tr> </table> </form> </body> </html>
session.jsp
<%-- Created by IntelliJ IDEA. User: southwind Date: 2019-07-07 Time: 21:39 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% session.setAttribute("name","session"); request.setAttribute("name","request"); response.sendRedirect("test.jsp"); %> </body> </html>
test.jsp
<%-- Created by IntelliJ IDEA. User: southwind Date: 2019-07-07 Time: 20:32 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>test</h1> <% String requestName = (String) request.getAttribute("name"); String sessionName = (String) session.getAttribute("name"); %> requestName<%=requestName%><br/> sessionName<%=sessionName%> </body> </html>
welcome.jsp
<%-- Created by IntelliJ IDEA. User: southwind Date: 2019-07-07 Time: 20:48 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String name = (String) request.getAttribute("name"); %> 欢迎回来~!<%=name%> </body> </html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> </web-app>