什么是JSP
在早一点的网络项目中写网络页面是使用 .JSP 为后缀的文件来写网页的,因为可以在 JSP 中写Java代码,所以在早些时候是相当受追捧的产物。
JSP全称为 Java服务器页面。
JSP运行原理
当把项目中的JSP部署到tomcat等服务器上之后,其运行过程其实是这样的
tomcat编译虚拟机 把jsp文件变成成java文件 jvm 变成.class
打开tomcat会看到如下效果
和在servlet里面拼接html写法相同
说白了你会发现 jsp本质上就是一个servlet
Servlet和JSP的异同【经典面试题】
相同点:
都是servlet响应前台的内容,在拼接html方式都是一样的,请求和响应方法一样
不同点:
Servlet:继承httpServlet
Servlet设计初衷是为了变成控制层
直接执行java代码
Jsp:
继承HttpJspBase
Jsp设计初衷是为了视图层,完美显示页面的
Jsp必须要经过tomcat编译成java文件
Jsp本质上就是一个servlet
MVC设计模式
Jsp本质上就是servlet,也就是说我所有的代码都可以写在jsp上面,这个时候会导致代码非常混乱
Jsp黑历史:
早期开发model1 时代,混乱时代,早期的程序员对jsp的崇拜达到了疯狂的程度,所有的代码全部放在jsp中,那是一个混乱的时代,民不聊生,寸草不生,惨绝人寰
这时候耦合度非常高,你想后期维护修改,比登天还难
JSP中写Java规则如下
<% java代码 %>
<%= 输出变量 %>在页面输出内容 相当于System.out.print 在控制台输出
注释:java代码注释方式相同,
整体注释<%-- 注释内容—%>
<%! 全局变量的声明 %>
Mode2时代
mvc这种思想,解耦 把每一层分门别类的去书写
相继出现:servlet,Struts,springmvc
前台页面只放html不能再去放java代码,一直到现在mvc深入人心
M:model 模型层 java代码,dao ,service,servelt
V: view 视图层 html,jsp,asp…
C:controller 控制层 servlet,springmvc --contorller
什么是MVC【经典面试题】
MVC是model2中出现的一个设计模型,将原有的JSP能够编写各种代码的model2转化为分层管理的model2. 将功能分为视图、模型及控制器,达到了一个解耦合的目的。
这里看一下专业的解释
JSP指令
Jsp的三大指令
Page :对jsp的描述
Include:页面包含
Tablib:标签库 相当于java import
Page指令:
errorPage=“error.jsp” 指定报错页面
Include:
将某一jsp页面作为当前页面的一部分
Taglib指令:
<%@taglib uri="" prefix=“c” %>
EL表达式
EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
${ 表达式}
<%@page import="java.util.HashMap"%>
<%@page import="com.ujiuye.bean.FoodBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${"随便一句话"}
${3>9 }
${5%3 }
${3>5 or 5>3 }
${3>5?"成立":"不成立" }
<br>
<%
FoodBean food=new FoodBean(100, "方便面","生吃", "大地", "方便面真好吃");
request.setAttribute("food", food);
HashMap map=new HashMap<>();
map.put("name", "张三");
map.put("psw", "123456");
request.setAttribute("m", map);
%>
${food.fid}
${food.fname }
${food.eatType }
${food.city }
<div>
<font color="red">${food.des }</font>
<a href="http://baidu.com?fid=${food.fid}">百度</a>
<input value="${food.eatType }">
</div>
<div></div>
${m.name }
${m.psw }
</body>
</html>