1、重定向和请求转发
重定向:
请求转发 :
区别
1. 重定向地址栏会发生改变,而且会产生新的请求对象。无法获取request保存的数据。 2. 请求转发地址栏不会发生改变,而且用的是同一个请求对象。可以获取request保存的数据。
保存周期越长,占用的资源时间也就越长。 一般我们在开发时大部分数据习惯保存到request对象中。 只要少量的数据保存到session会话中。比如登录时用户的信息保存到session会话中。
2、EL表达式
EL表达式-->作用: 获取四大域对象中数据。
语法: ${xxxScope.key}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//往四大域存储数据
pageContext.setAttribute("name","pageContext的内容");
request.setAttribute("name","request的内容");
session.setAttribute("name","session的内容");
application.setAttribute("name","application的内容");
%>
<hr>
通过getAttribute()获取四大域对象的内容<br>
<%=pageContext.getAttribute("name")%><br>
<%=request.getAttribute("name")%><br>
<%=session.getAttribute("name")%><br>
<%=application.getAttribute("name")%><br>
<hr>
通过el表达式获取四大域对象的内容<br>
${pageScope.name}<br>
${requestScope.name}<br>
${sessionScope.name}<br>
${applicationScope.name}<br>
</body>
</html>
el表达式 还可以省略scope ${key} 那么它会从哪个对象中获取数据。默认从pageContext扫描有没有对于的key,如果有则不继续往下扫描了,如果没有则继续往下扫描request, 以此类推。
不指定范围<br> ${name}<br> ${name}<br> ${name}<br> ${name}<br>
3、jstl标签库
里面提供了一些常用的标签---比如: 循环标签 判断标签。
使用这些标签的作用是为了减少jsp中java脚本代码的添加。 企业不建议大家在jsp中使用太多的<%%> 这样会使得网页比较乱。 这时就有人提供了JSTL标签库。
使用jstl标签库的流程:
(1)web工程中引入jstl标签库的依赖
(2)在使用jstl标签的jsp网页上引入该标签库
<%--jsp网页的头部引入jstl核心标签库--%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(3)使用
<%@ page import="com.ykq.entity.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--jsp网页的头部引入jstl核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//这里保存数据的目标就是为了操作方便。这些数据都是从数据库中查询。
List<User> list=new ArrayList<>();
list.add(new User(1,"张胜男","北京",25,0));
list.add(new User(2,"李四","杭州",35,1));
list.add(new User(3,"王五","上海",15,1));
list.add(new User(4,"赵六","郑州",55,1));
request.setAttribute("users",list);//把集合保存到request对象中了。
%>
<table border="1" width="500">
<tr>
<td>编号</td>
<td>姓名</td>
<td>地址</td>
<td>年龄</td>
<td>性别</td>
</tr>
<!--使用jstl标签库循环遍历request中保存的集合
forEach遍历:
items:表示要遍历的集合或数组
var: 表示遍历集合时,把集合中每个元素的只赋值给该变量
-->
<%--
if: 条件判断
test:表示条件。如果条件成立则if语句块被执行。
--%>
<c:forEach items="${users}" var="u">
<tr>
<td>${u.id}</td>
<td>${u.name}</td>
<td>${u.address}</td>
<td>${u.age}</td>
<c:if test="${u.sex==0}">
<td>男</td>
</c:if>
<c:if test="${u.sex==1}">
<td>女</td>
</c:if>
</tr>
</c:forEach>
</table>
</body>
</html>
4、servlet 控制层
servlet:就是java类代码。它可以介绍前端页面传递的数据,同时也可以把后端查询的结果响应给前端,以供前端能把数据展示到jsp网页。
使用servlet的好处:
使用servlet的流程:
(1) 创建一个类并继承HttpServlet父类。
public class HelloServlet extends HttpServlet {
}
(2) 重写HttpServlet中service方法。---进行业务处理的。
//可以接受前端传递的参数 也可以把后端查询的数据保存并让前端获取
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
(3) 把自定义servlet配置到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">
<!--注册我们自定义的servlet. 表示该servlet交于tomcat容器帮你创建对象了。
HelloServlet helloServlet =new HelloServlet();//容器创建
-->
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.ykq.servlet.HelloServlet</servlet-class>
</servlet>
<!--配置请求路径与servlet的对应关系-->
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
5、使用servlet完成了登录功能