JSP
Java Server pages
java服务器端页面,和Servlet一样,开发动态web
jsp可以嵌入Java代码,为用户提供动态数据,最终转化为一个java类。
原理
Jsp写的HTML代码–转化为Servlet输出 – --> out.write("\n")
jsp本质上是一个Servlet。
HttpJspBase extends HttpServlet implements HttpJspPage
浏览器向服务器发送请求,不管访问什么资源,其实都是访问Servlet!
public void _jspinit(){} // 创建初始化
public void _jspDestroy(){} // 销毁
public void _jspService(HttpServletRequset requset, HttpServletResponse response){
// 判断请求
// 内置对象
}
内置对象:
- PageContext pageContext // 页面上下文
- Httpsession session
- ServletContext application // applicationContext
- ServletConfig config
- JspWriter out
- Object page
- JspWriter _jspx_out
- PageContext _jspx_page_context
作用域:
- sessionScope sessionScope.get()
- pageScope
- requestScope
- applicationScope
jsp的规则
<html> <!--对应java为 out.write("<html>\r\n")-->
${ <!--对象--> } <!--EL表达式-->
<% //java代码 %>
<% =//变量或者表达式 %>
<% =name %> <!--对应java为 out.print(name)-->
<%-- 注释 --%>
JSP基础
导入依赖:Sevlet依赖,JSP依赖,JSTL表达式依赖,standard标签库。
注意:这里选择war exploded后面可以实现热部署
语法
可以嵌套代码
<%
for (int i=0; i<5; i++){
%>
<h1> Hello <%=i%> </h1>
<h1> Hello ${i} </h1>
<% }// 输出5个hello i,因为jsp在源码里面将HTML转化为
// out.write("<h1> Hello");
// out.print(i);
// out.write("</h1>\n");
%>
<!--JSP声明-->
<%!
static{xx}
private int a = 0;
public void a(){}
%>
JSP声明:会被编译到jsp生成的Java类中,其他的就会被生成到——jspService方法中
<!--导包-->
<%@ page import="java.util.*"%>
<!--定制错误页面-->
<%@ page errorPage="error/500.jsp" %>
<!--web.xml厘米定制错误页面-->
<error-page>
<error-code>500</error-code>
<location>error/500.jsp</location>
<!--error/500.jsp-->
</error-page>
<!--固定头部,jsp:include,拼接页面,本质是一个-->
<jsp:include page = "/common/xx.jsp">
<jsp:include page = "/common/xxs.jsp">
9大内置对象
pagecontext,request,response,session,application,config,out,page,exception
session域和application域可以跨页面
request也可以跨页面,只是一定要通过请求转发[pageContext.forward(“xxx.jsp”)]
从pageContext取出,从底层到高层(作用域)寻找,page->request->session->application,没有找到就错误。(责任链)
(双亲委派机制:自定义的类不能和jar库的类重名,从底层开始找,无论找到没找到都向上找,就算找到了,也会被上层替代)
- pageContext:保存的数据只在一个页面中有效
- request:**保存的数据只在一次请求中有效。**客户端向服务器发送请求,产生数据,用户看完就没用了,新闻
- session:保存的数据只在一次会话中有效。客户端向服务器发送请求,产生数据,用户用完还可以用,购物车
- application:保存的数据只在一次服务器中有效。客户端向服务器发送请求,产生数据,一个用户用完了,其他用户也可以使用,共享数据,也就是ServletContext ,聊天数据
JSP标签
EL表达式:${} :获取常用的web对象数据
获取表单中的数据:${param.参数名}
请求转发:使用jsp标签的形式
<jsp:forward page = "/common/xxs.jsp">
<!--请求转发所携带的参数-->
<jsp:param name="xx" value=12></jsp:param>
</jsp:forward>
取出参数
<%=request.getParameter("name")%>
JSTL表达式
标签库,自定义标签,标签的功能和java代码一样
注意:Tomcat可能要导包
- 核心标签
- 格式化标签 prefix=“fmt”
- SQL标签 prefix=“sql”
- XML标签 prefix=“x”
<!--引入JSTL核心标签库,才能使用JSTL标签-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="xxx"/>
</c:if>
<!--保存数据-->
<c:set var="score" value="xx">
</c:set>
<!--switch-->
<c:chose>
<c:when test="${score<=60}">
xxxx
</c:when>
</c:chose>
<!--foreach遍历-->
<% request.setAttribute("list",xx);// xx Array数组对象 %>
<c:forEach var="xx" item="${list}"></c:forEach>
<!--for遍历-->
<c:forEach var="xx" item="${list}" begin="1" end="3" step="1" ></c:forEach>
javaBean
JavaBean 是一种JAVA语言写成的可重用组件。JavaBean符合一定规范编写的Java类,不是一种技术,而是一种规范。所有属性为private。
实体类,POJO(Plain Ordinary Java Object)
- 必须有一个无参构造函数
- 属性必须私有化
- 必须有对应的get/set方法
一般用来和数据库的字段做映射:ORM
JavaBean是对应了数据库的一张表
区别
POJO其实是比javabean更纯净的简单类或接口。POJO严格地遵守简单对象的概念,而一些JavaBean中往往会封装一些简单逻辑。
POJO主要用于数据的临时传递,它只能装载数据, 作为数据存储的载体,而不具有业务逻辑处理的能力。
JavaBean虽然数据的获取与POJO一样,但是javabean当中可以有其它的方法。
ORM:对象关系映射,表->类,字段->属性,行记录->对象
实体类一般与数据库的表结构一一对应
小知识
@TableField("")自动转驼峰
lombook一句话 @Data
<jsp:userBean id="people" class="com.xx.People" scope="page"/>
<!--等价于People people = new People();-->
<!--property 属性-->
<jsp:setProperty name="people" property="id" value= "xx"/>
<!--等价于people.setId();-->
xx:<jsp:getProperty name="people" property="id"/>
<!--等价于people.getId();-->
以上可以在spring ioc里配置