jsp:一个可以存放java与html混写的文件
从某种层面来说,它实际就是一个servlet
因此servlet里面能定义获取的,他也可以用,只不过方式不一样。
java在我们访问一个jsp的时候,会自动把jsp文件编译一个带有service方法的java文件。这个文件存放在IDE给我们配置项目的缓存目录里面,在work目录下面。work就是在我们的工作的过程中产生的文件
顺便看一个文件看看
很明显可以看到,内部也是给我们转化了servelt文件,然后给我们编译了一个service方法,然后把我们需要的东西放进去了。
下面说一下JSP定义代码的方式:
话不多说,直接上代码:
demo1.jsp
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2022/3/18 Time: 12:37 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> <% int i = 3;//这里就是定义到service里面的变量 %> <%! int i =10;//这个就是转换后java文件的成员位置上面 %> <%= i//这里就会把上面定义的i变量直接输出到浏览器,这里会打印3,就近原则,其实这里 //这是在service方法里面执行 %> </body> </html>
上面运行一下
这里会打印3,直接看一下转换后的源文件
上面可以看到i=10这个变量,被定义成了一个类的成员属性
上面i=3就把它定义到service方法里面,并且在service方法里面打印了数据。
我们还可以调用内部的内置对象
下面来说九个jsp内置对象
下面简单来说一下mvc开发模式:一种开发软件的方法
下面来说一下EL表达式,这玩意就是用在jsp页面,用来简化java代码页面编写,他不用放到<% %>这个里面
下面简单说一下EL表达式中的隐式对象:
EL有十几个隐式对象,就像上面四种,我们这里重点说一下pageContext隐式域,他可以获取JSP其他八个内置对象
${pageContext.request.contextPath}:动态获取虚拟目录
这里面request对象,里面有一个getContextPath()方法,所以可以通过.contextPath来获取虚拟目录
那么我们换句话说,我们获取虚拟目录可以这样${requestScope.contextPath},这样是不可以的啊
说一下这两者的区别,先看一下打印信息
一个打印的是这个域对象的地址,一个只是获取到这个域设置的值,这个只是给我们返回一个相应对象数据的map集合,里面存放了我们的数据而已。
下面来说一下JSTL标签
再来具体说一下foreach标签:
话不多说,上个代码
<%@ page import="domain.User" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>Title</title> </head> <body> <% List<User> list = new ArrayList<User>(); list.add(new User("tom",25,new Date())); list.add(new User("tonny",28,new Date())); list.add(new User("jack",35,new Date())); //在request域中 request.setAttribute("list",list); %> <table border = "1" width = "500" align = "center"> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>生日</th> </tr> <c:forEach items="${list}" var="user" varStatus="s"> <c:if test="${s.count % 2 == 0}"> <tr bgcolor="red"> <td>${s.count}</td> <td>${user.age}</td> <td>${user.name}</td> <td>${user.birday}</td> </tr> </c:if> <c:if test = "${s.count % 2 != 0}"> <tr bgcolor="green"> <td>${s.count}</td> <td>${user.age}</td> <td>${user.name}</td> <td>${user.birday}</td> </tr> </c:if> </c:forEach> </table> </body> </html>