15年-16用的jsp,后来基本上没用过了,现在都2022年了,我来开倒车了...
jsp出现的意义
Servlet就是一个能处理HTTP请求,发送HTTP响应的小程序,而发送响应无非就是获取PrintWriter,然后输出HTML:
PrintWriter pw = resp.getWriter();
pw.write("<html>");
pw.write("<body>");
pw.write("<h1>Welcome, " + name + "!</h1>");
pw.write("</body>");
pw.write("</html>");
pw.flush();
那有没有更简单的输出HTML的办法?
有!
我们可以使用JSP。
JSP是Java Server Pages的缩写,它的文件必须放到/src/main/webapp下,文件名必须以.jsp结尾,整个文件与HTML并无太大区别,但需要插入变量,或者动态输出的地方,使用特殊指令<% ... %>。
语法
整个JSP的内容实际上是一个HTML,但是稍有不同:
- 包含在<%--和--%>之间的是JSP的注释,它们会被完全忽略;
- 包含在<%和%>之间的是Java代码,可以编写任意Java代码;
- 如果使用<%= xxx %>则可以快捷输出一个变量的值。
内置变量
JSP页面内置了几个变量:
- out:表示HttpServletResponse的PrintWriter;
- session:表示当前HttpSession对象;
- request:表示HttpServletRequest对象。
<html>
<head>
<title>Hello World - JSP</title>
</head>
<body>
<%-- JSP Comment --%>
<h1>Hello World!</h1>
<p>
<%
out.println("Your IP address is ");
%>
<span style="color:red">
<%= request.getRemoteAddr() %>
</span>
</p>
</body>
</html>
指令
page指令引入Java类
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
include指令可以引入另一个JSP文件
<html>
<body>
<%@ include file="header.jsp"%>
<h1>Index Page</h1>
<%@ include file="footer.jsp"%>
</body>
JSP Tag
<c:out value = "${sessionScope.user.name}"/>
JSP Tag需要正确引入taglib的jar包,并且还需要正确声明,使用起来非常复杂,对于页面开发来说,不推荐使用JSP Tag,因为我们后续会介绍更简单的模板引擎,这里我们不再介绍如何使用taglib。
Struts2
取值
struts2中可以使用的取值方式:
- jsp内置对象取值
- jstl标签+EL表达式取值
- struts2标签+OGNL表达式
拦截器interceptor & 过滤器 filter
相同点:
- 都是一种java类
- 都能拦截客户端发给服务器端的请求
- 拦截到请求之后都可以做一些相应的处理,最后还可以把这个请求放行.
- 都需要实现各自相应的接口以及在相应的配置文件中配置.
不同点:
拦截器(interceptor)是struts2框架中的定义的,过滤器(filter)是web里面的对象,是J2EE标准里面定义的.
拦截器(interceptor)只会拦截器访问action的请求,过滤器(filter)能够拦截所有请求.
拦截器(interceptor)定义在struts.xml文件中,过滤器(filter)定义在web.xml文件中.
拦截器(interceptor)对象的创建、调用、销毁是struts2框架负责的,过滤器(filter)对象的创建、调用、销毁服务器负责的.