- JSP:
- 指令
- 注释
- 内置对象
- MVC开发模式
- EL表达式
- JSTL标签
- 三层架构
JSP
- 指令:用于配置JSP页面
- 导包导库等等
- 注释:
内置对象, 9个
- 变量名 真实类型 作用
pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
request HttpServletRequest 一次请求访问的多个资源(转发)
session HttpSession 一次会话的多个请求间
application ServletContext 所有用户间共享数据
response HttpServletResponse 响应对象
page Object 当前页面(Servlet)的对象 this
out JspWriter 输出对象,数据输出到页面上
config ServletConfig Servlet的配置对象
* exception Throwable 异常对象
- 变量名 真实类型 作用
为什么jsp中能直接使用这些对象,因为jsp 本质就是一个servlet
- 找到项目在Tomcat中的-work目录:(out是项目部署目录)
- Using CATALINA_BASE: “C:\Users\quan\AppData\Local\JetBrains\IntelliJIdea2020
- 访问这个jsp页面会编译出来.class 和 .java 文件,里面有这9个内置对象
-
```java
/*
- Generated by the Jasper component of Apache Tomcat
- Version: Apache Tomcat/8.5.70
- Generated at: 2021-09-25 09:19:38 UTC
- Note: The last modified time of this file was set to
- the last modified time of the source file after
- generation to assist with modification tracking. */ package org.apache.jsp;
import javax.servlet.; import javax.servlet.http.; import javax.servlet.jsp.*;
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports {
private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map
private static final java.util.Set
private static final java.util.Set
static { _jspx_imports_packages = new java.util.HashSet<>(); _jspx_imports_packages.add(“javax.servlet”); _jspx_imports_packages.add(“javax.servlet.http”); _jspx_imports_packages.add(“javax.servlet.jsp”); _jspx_imports_classes = null; }
private volatile javax.el.ExpressionFactory _el_expressionfactory; private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map
public java.util.Set
public java.util.Set
public javax.el.ExpressionFactory _jsp_getExpressionFactory() { if (_el_expressionfactory == null) { synchronized (this) { if (_el_expressionfactory == null) { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); } } } return _el_expressionfactory; }
public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() { if (_jsp_instancemanager == null) { synchronized (this) { if (_jsp_instancemanager == null) { _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } } } return _jsp_instancemanager; }
public void _jspInit() { }
public void _jspDestroy() { }
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {
final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
return;
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
try {
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("\n");
out.write("\n");
out.write("<!DOCTYPE html>\n");
out.write("<html lang=\"zh-CN\">\n");
out.write("<head>\n");
out.write(" <meta charset=\"utf-8\"/>\n");
out.write(" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"/>\n");
out.write(" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n");
out.write(" <title>首页</title>\n");
out.write("\n");
out.write(" <!-- 1. 导入CSS的全局样式 -->\n");
out.write(" <link href=\"css/bootstrap.min.css\" rel=\"stylesheet\">\n");
out.write(" <!-- 2. jQuery导入,建议使用1.9以上的版本 -->\n");
out.write(" <script src=\"js/jquery-2.1.0.min.js\"></script>\n");
out.write(" <!-- 3. 导入bootstrap的js文件 -->\n");
out.write(" <script src=\"js/bootstrap.min.js\"></script>\n");
out.write(" <script type=\"text/javascript\">\n");
out.write(" </script>\n");
out.write("</head>\n");
out.write("<body>\n");
out.write("\n");
out.write("<div align=\"center\">\n");
out.write(" <a\n");
out.write(" href=\"");
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${pageContext.request.contextPath}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
out.write("/userListServlet\" style=\"text-decoration:none;font-size:33px\">查询所有用户信息\n");
out.write(" </a>\n");
out.write("</div>\n");
out.write("\n");
out.write("</body>\n");
out.write("</html>\n");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
} }
``` 关于IDEA中Tomcat项目的部署多说几句:
- 在idea中配置的tomcat,在运行时idea不会把项目放到自己的webapps路径下,而是复制三份文件到 ${user.home}/.IntelliJIdea/system/tomcat 目录(Mac)下的各自项目。
MCV 开发模式
M:Model,模型。JavaBean - Dao
- 完成具体的业务操作,如:查询数据库,封装对象
2. V:View,视图。JSP - Web层,界面层
展示数据
3. C:Controller,控制器。Servlet - Service
获取用户的输入
调用模型
将数据交给视图进行展示
- 完成具体的业务操作,如:查询数据库,封装对象
三层架构
- 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
- 业务逻辑层:处理业务逻辑的。
- 数据访问层:操作数据存储文件。data access object
and Demo-用户信息查询
EL表达式
- 概念:Expression Language 表达式语言
- 作用:替换和简化jsp页面中java代码的编写
- 语法:${表达式}
- 使用:
- 运算
- 获取值
- el表达式只能从域对象中获取值
- 语法
- ${域名称.键名}:从指定域中获取指定键的值
- ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
- 获取对象、List集合、Map集合的值
- 对象:${域名称.键名.属性名} #属性名即:getter setter方法去掉set get ,剩余部分首字母变小写
- List集合:${域名称.键名[索引]}
- Map集合:${域名称.键名.key名称} , * ${域名称.键名[“key名称”]}
- 隐式对象:
- el表达式中有11个隐式对象 pageContex
- 可获取jsp其他八个内置对象
JSTL
- 概念:JavaServer Pages Tag Library JSP标准标签库,是由Apache组织提供的开源的免费的jsp标签 <标签>
- 作用:用于简化和替换jsp页面上的java代码
- 使用步骤:
1. 导入jstl相关jar包
2. 引入标签库:taglib指令: <%@ taglib %> #比如要JSTL标签;就像java中导包
3. 使用标签 - 常用JSTL 标签
- if:相当于java代码的if语句
- 属性:test
- choose:相当于java代码的switch语句
- foreach:相当于java代码的for语句
- if:相当于java代码的if语句