什么是JSP
-
Java Service Page :Java服务器页面。
处理一些Java前后端交互的数据,主要用来显示数据,不建议大量代码写在JSP页面里面; -
特点:简单,和HTML差不多
-
缺点:书写页面会很乱,HTML代码和JAVA交错;
JSP执行过程
- 动态请求会被分发到Web容器(Web服务器)中。
容器会去执行字节码文件,就是 .class文件。
Servlet是java类,可以直接编译成class文件。
问题?Jsp怎么编译成class文件。
于是你会想,jsp是不是会被转换成一个java类。
追究本质
Tomcat在工作的时候,将我们的Jsp页面转换成了java类
打开这个类分析:
他继承一个类:HTTPJSPBase , 没有直接继承HttpServlet , 但是HTTPJSPBase继承了HttpServlet,所以得出结论
JSP本身就是一个servlet的方式运行的
那他怎么输出页面的呢?发现他是使用out对象输出到浏览器
那这个out对象上去的方式是什么呢?
发现,有一个_jspService可以执行操作我们的JSP,将他输出到前端页面
继续分析源码,得到一些属性;
MVC架构
JSP基础语法
-
JSP基础语法
1.JSP 输出 获得变量的值 <%= 表达式或者变量值 %>【可以使用EL表达式注意区别】
2.JSP定义**局部变量:**写一段Java代码 <% Java代码 %>
注意点:必须严格遵守Java规范
3.JSP定义全局变量 <%! 全局变量或方法 %> -
简化符:因为HTML是标记语言,我们需要一些标记
EL表达式和JSTL标签 -
${} == <%= %> 联系和区别
两者功能一样都是用来输出的;但是
EL表达式一般用来输出变量的值;而不能是一个对象; -
tomcat会在jsp解析的时候将_jspService转换成对应的doget。dopost,我们正常方式无法直接调用!
<%– -
//JSP内置对象:
pageContext 作用域:
application = pageContext.getServletContext(); 应用
session = pageContext.getSession(); 会话
request = 请求
page = this; 页面=== out.输出
–%>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
全局变量:
<%!
int i = 0;
public int add(int a,int b){
return a+b;
}
%>
局部变量:
<%
//Java代码
String name = "qinjiang";
int age = 18;
int j = 0;
Date date = new Date();
out.write(
(java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate
("${name}", java.lang.String.class,
(javax.servlet.jsp.PageContext)_jspx_page_context,
name
)
);
%>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>
日期:<%=new Date()%>
名字:<%=name%>
年龄:<%=age%>
i:<%=i++%>
j:<%=j++%>
</h1>
</body>
</html>
简单扩展BootStarp
前端框架:BootStarp
库:拿来即用
Bootstrap 是全球最受欢迎的前端组件库,用于开发响应式布局、移动设备优先的 WEB 项目。
基于 jQuery 的强大的插件系统,能够快速为你的想法开发出原型或者构建整个 app 。
类似的还有layui之类的框架;
JSP使用
- jsp代码可以在不同的 <%%>中实现,但是,Java代码必须保持完成,否则500;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<%--在页面输出100个Hello,World--%>
<%
for (int i = 0; i < 100; i++) {
%>
<h1>Hello,World</h1>
<%
}
%>
</body>
</html>
MVC架构
为了职责统一,每个人就干每个人的事情;
解耦 : 低耦合,高内聚 , 类与类之间通过接口交互; 自己各司其职做自己的事情;
JSP指令
<%–
JSP指令只有三个
page、include、taglib (标签)
公式:
<%@ 指定名 属性名=属性值;[属性名=属性值;属性名=属性值…] %>
page指令
autoFlush:自动刷新 (true,false:默认)
contentType:页面文本类型 “text/html”
errorPage: 如果存在错误页面,就跳转至指定的页面 【不推荐使用,推荐在XML中配置】
language:JSP中使用的语言,默认是java
pageEncoding:页面编码
import:因为jsp本质上就是一个servlet,所以需要导入相关jar包才能使用。
include指令
导入其他页面包含到本页,网站中一般有一些公用的位置,我们可以提取出来,比如网站的头部,和尾部
file属性:【要导入页面,一般都是不完整的网页,只包含部分】
taglib:标签库
在jsp中有大量的java代码十分痛苦,所以开发中我们可以使用一些现成的标签库,就相当于使用一些替代java代码的标签语言
out.print()-----> <c:out> : 这个c就是一个别人定义好的标签库,像这样的库有非常多,我们甚至可以自己定义;
我们之后学习的JSTL标签就是这里的标签库
–%>
需要掌握:
include指定:包含页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div>
<h1>我是footer</h1>
</div>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div>
<h1>我是header</h1>
</div>
<body>
<%--使用include指定加载网页其他部分--%>
<%@include file="common/header.jsp"%>
<h1>我是index页面</h1>
<%@include file="common/footer.jsp"%>
</body>
errorPage:错误页面
<?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">
<!--如果网站中出现了404,就跳转到指定的页面-->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/exception.jsp</location>
</error-page>
</web-app>
JSP标签
JSP标签
语法:<jsp:XXX >
-
jsp:include:
page属性:要包含的页面地址jsp:include 和 @include 区别
@include 静态包含 : 他会把包含进来的页面和自己的页面融合成为一个servlet
jsp:include 动态包含 :他不会把包含进来的页面和自己的页面融合成为一个servlet 【推荐使用,容错率更高】 -
jsp:forward
page属性:要转发到的页面,url不变,
本质就是request的请求转发,可以携带参数;可以通过request取出来这个携带的参数
一般配合jsp:param使用 -
jsp:param
一般配合jsp:forward使用,携带参数
<jsp:include page="common/header.jsp"/>
<h1>我是tag页面</h1>
<jsp:include page="common/footer.jsp"/>
<jsp:forward page="index.jsp"/>
<jsp:forward page="index.jsp">
<jsp:param name="username" value="kuangshen"/>
<jsp:param name="age" value="18"/>
</jsp:forward>
index页面的取出代码
名字:<%=request.getParameter("username")%>
年龄:<%=request.getParameter("age")%>