1.概念:
JDBC就是java语言操作关系型数据库的一套API
2.常用API
2.1DriverManager :
作用1.注册驱动 2.获取数据库连接;都是静态方法,直接类名.方法
2.2Connection:
作用1.获取sql执行对象 2.事务管理 《《关于管理事务回滚常用方法setAutoCommit() commit() ,rollback()
2.3Statement :
作用执行SQL语句 《《常用方法 executeUpdate();//执行DML(增删改操作),DDL,DML返回受影响的行数,如果执行DDL,执行成功也可能返回0 executeQuery(sql)执行DQL语句,返回ResultSet(结果集对象)
2.4对DML,DDL,DQL,DCL解释
DDL(数据定义语言) :主要用于定义数据库中的各类对象,包括用户,库,表,视图,索引触发器,事件,存储过程和函数等。
DCL(数据控制语言):用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库,表,字段,用户的访问权限和安全级别。
DML(数据操作语言):用于增删改 数据库记录,并检查数据完整性.主要有INSERT,UPDATE,DELETE
DQL(数据查询语言):主要用来查看表中的数据,也是平时用的最多的。主要SELECT
2.5ResultSet
接收executeQuery返回的对象
常用方法:next();判断下一行是否有数据
getInt/Double/String();获取数据库中的数据
2.6PrepareStatement
继承自Statement
作用:预编译SQL语句并执行,预防sql注入问题
3.数据库连接池
3.1数据库连接池简介
一个容器,负责分配,管理数据库连接
好处: 资源重用,提升系统相应速度 。避免数据库连接遗漏
3.2数据库连接池实现
常见的 数据库连接池
1.DBCP 2.C3p0 3.Druid(阿里巴巴开源的数据库连接池项目 功能强大,性能优秀)
标准接口 DataSource ()
功能获取连接
Connection getConnection()
1.1关于系统架构
有b/s:Browser/Server (浏览器/服务器)
优点:升级维护方便,成本低,不需要安装特定客户端软件
缺点:速度慢,体验差,不安全。
c/s架构:client/server (客户端 /服务器) 例如qq
优点:速度块,体验好,界面酷炫,服务器压力小,安全
缺点:升级维护比较麻烦
1.2B/S结构通信原理
在访问网站过程中,www.ip:port/资源路径
url:统一资源定位符
当前主机在网络中用ip定位服务器,当前主机向服务器发送请求,服务器向主机响应,端口用于定位服务器中的软件
分为web服务器和应用服务器,常见的应用服务器有JBOSS ,WebLogic,WebSphere
常见的Web服务器有Tomcat,jetty
应用服务器实现了JavaEE中的所有13个规范,而web服务器中只实现了Servlet+jsp两个规范
所以应用服务器中包含了web服务器
tomcat:开源免费的轻量级WEB服务器
《java的13个规范》1、JDBC(java Database Connectivity,Java数据库连接): 负责数据库访问。
2、JNDI(Java Name and Directory Interface, Java名称与目录接口): 根据名称和文件目录获取数据,如数据库连接时配置数据源,根据数据源名称,在配置文件中查找连接数据。
3、EJB(Enterprise Java Bean,企业级Java Bean): 将业务逻辑从客户端软件中抽取出来,封装组件中,运行在一个独立的服务器上。客户端软件通过网络调用组件提供的服务以实现业务逻辑,客户端功能只负责发送调用请求和显示处理结果。运行在独立的服务器上,封装了业务逻辑的组件就是EJB组件。EJB基础是RMI(Remote Method Invocation,远程方法调用)。
4、RMI(Remote Method Invocation,远程方法调用): 通过RMI,将EJB组件创建为远程对象,客户端利用对象序列化和反序列化,通过网络调用EJB对象。RMI是RPC(Remote Procedure Call,远程过程调用)在Java中的实践。JDK/bin下有rmic.exe(编译器,生成stub(存根)和skeleton(骨架))、rmiregistry.exe(为rmi提供命名服务,把名字和对象关联在一起)、rmid.exe(支持rmi激活)。
5、Java IDL(Interface Definition Language,接口定义语言)/CORBA(Common Object Request Broker Architecture,公共对象请求代理结构): JDK/bin下的idlj.exe将IDL文件解析成对应的Java文件,结合org.omg.CORBA等org.omg里的JavaAPI生成服务端和客户端代码。通过JDK/bin下的orbd.exe启动服务。客户端对本地对象的调用映射到对服务端对象的调用。和RMI有相同的目标。 推荐:IDL简介与corba入门案例 - 红日悬天 - 博客园
6、JSP(Java Server Pages,Java 服务端页面): JSP由html和嵌入的Java代码组成。server收到client请求后处理java代码,然后将新的网页返回给client。
7、Java Servlet(Java 小型服务端应用程序): 响应用户请求,可以动态创建网页。
8、XML(Extensible Markup Language,可扩展标记语言): XML是一种能够用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。XML的发展和Java是互相独立的,可是,它和java具有同样目标正是平台独立。通过java和xml的组合,我们能够得到一个完美的具有平台独立性的解决方式。
9、JMS(Java Message Service,Java消息服务): 负责消息发送和接收。JMS两种类型:点对点(请求、响应,Pull)模式;发布、订阅(Push)模式。消息中间件:Kafka、RabbitMQ、ActiveMQ等。 JMS(Java平台上的专业技术规范)_百度百科
10、JTA(Java Transaction API,Java事务API): 任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接、JDO (Java Data Object )PersistenceManager(持久管理器)对象、JMS队列、JMS主题、企业JavaBeans(EJB)、一个用J2EE Connector Architecture 规范编译的资源分配器。 jta_百度百科
11、JTS(Java Transaction Service,Java事务服务): JTS是一个组件事务监视器(Component Transaction Monitor)(有时也称为对象事务监视器(Object Transaction Monitor))
12、JavaMail(Java Mail,Java邮件): JavaMail是处理电子邮件的API。
13、JAF(JavaBeans Activation Framework,Java对象激活框架): JAF是一个专用的数据处理框架,用于封装数据,并为应用程序提供访问和操作数据的API。对数据源进行查看、编辑和打印等操作。
2.1Tomcat 服务器启动
bin 下的stratup.bat.. bat文件打开在cmd窗口执行相应的命令(windows使用)
stratup.sh sh文件执行文件中的shell命令(linux使用)
通过分析startup.bat发现找到了catalina.bat,打开startup.bat实际是执行catalina.bat
而catalina.bat有这样的配置 MAINCLAAS=org.apache.catalina.startup.Bootstrap(main方法所在的类)
得:::启动Tomcat就是在执行main方法
配置了那些环境变量 JAVA_HOME :路径
CATALINA_HOME :路径
path: %JAVA_HOME%\bin ; %CATALINA_HOME%\bin
启动Tomcat :cmd中输入startup (执行对应的bin下的bat文件) 关闭 cmd输入stop(将之前shutdown改名了,原因shutdown和windows中关机命令相同)
实现一个最基本的web应用(没有java小程序)
找到CATALINA_HOME/webapps目录;;;;《因为所有的webapp要放到webapps目录下》
在CATALINA_HOME/webapps目录下新建一个子目录,起名oa,(oa就是这个webapp的名字)
在oa目录下新建资源文件。例如 index.html
启动tomcat
打开浏览器,输入网址 127.0.0.1:8080/oa/index.html
login
login
以上两种效果是一样的,不同的是2用了绝对路径
2.2BS结构系统中的角色和协议
有那些角色(在整个BS系统结构中,有那些人参与进去了)
浏览器软件的开发团队(火狐,谷歌)
web Server 开发团队(tomcat,jetty,Weblogin,JBOSS)
DB Server开发团队’(Oracle,mtsql)
webapp开发团队(我们作为java程序猿开发的)
角色与角色之间遵守那些协议
webapp的开发团队和webServer 开发团队有一套规范,javaee规范之一Servlert规范
《《Servlet规范作用,web Server 和webapp解耦合
Browser和WbeServlet之间有一套传输协议:http协议
webapp和DBserver 之间有JDBC协议
为了解决用户和浏览器动态交互的问题,到了1997年,SUN 公司(发明了JDK) 推出了Servlet
技术。
Servlet 是一个基于 Java 技术开发的 web 组件,它运行在服务器端,由 Servlet容器
管理。主要用于处理用户的请求并生成动态
的信息。
作者:知否技术 链接:https://juejin.cn/post/7041784126701043749 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3.1开发一个带有Servlet的webapp
1.在tomcat里的webapp文件夹里新建一个文件(crm)(crm就是这个webapp的名字)
2.在crm下新建一个目录WEB-INF(Servlet规范大小写也得一样,不能改)
3.在WEB-INF下新建一个目录classes(也是Servlet规范大小写也得一样,),存放的是java程序编译子后的class文件(字节码文件)3
4. 在WEB-INF下新建一个lib目录(bushi必须),放jar包
在WEB-INF下新建一个web.xml(必须)文件,配置信息
编写java程序,这个程序必须实现Servlet接口
编写helloServlet, 生成class文件放到classes中
在web.xml中注册信息,
html文件放到WEB-INF外面
webapp目录结构
webappname !-------WEB-INF !------classes(存放字节码) !-----lib(第三方jar包) !-----web.xml(注册Servlet) !--------html !--------css !--------js !--------image .....
在浏览器中输出
public void service(ServletRequest request,ServletResponse response) throws ServletException , IOException{ //setContenetType方法设置类型 setContenetType("text/html"); System.out.println("My First Servlet, Hello Servlet"); //向浏览器中打印内容 //使用ServletResponse的getWriter()方法创建流 PrintWriter out= response.getWriter(); out.print("hello Servlet"); //要打印html标签需要在之前设置类型 out.print("您好,Servlet
");
3.2在Servlet链接数据库(JDBC)
在一个webapp中连接数据库,将驱动的jar包放到WEB-INF/lib目录下
3.3在集成环境中开发Servlet
1.新建一个空project
2.在project中新建一个javase Moudule
3.让javase Moudule变javaEE模块(在Moudule上右键:Add Framework Support)
4.在窗口中选择web Application
注生成的web目录就是Webapp的根
5.添加依赖,选择servlet-api.jar包和jsp-api添加到External Libraries 中
6.编写web.xml文件
idwebname com.bjpowernode.javaweb.servlet.StudentServlet idwebname /servlet/webname
7.在绿色小锤子右边,导入tomcat服务器,后续启动是用Debug
3.4Servlet对象生命周期
1.关于servlt的生命周期是不受程序员的管理的,是由Tomcat服务器全权负责的.
默认情况下,服务器在启动的时候Servlet对象是不会被实例化的
如何启动时创建Servlet对象,在Servlet标签中添加
默认情况下,服务器在启动的时候,Aservelt对象没有被实例化。用户发送第一次请求时,创建Aservlet对象,并执行构造方法,执行init方法,然后执行service方法。再次发送请求时,执行servlce方法。
4说明了Servlet是单例的,(单实例的,Servelt对象是单实例的,但是Servlet类不符合单例模式。称之假单例。真单例模式,构造方法是私有化的)
destroy方法在服务器关闭的时候执行。所以Servlet对象是在关闭服务器之后被销毁的
*当Servlet类编写一个有参数的构造方法时(并且没有无参构造方法),会报500
3.5适配器改造Servlet
在开发过程中,servlet子类经常实现Servlet接口,但是基本常用的就一个service方法,不利于代码的查看,所以我们采用一个中间类(GenericServlet),去实现Servlet,将常用的Service方法改为抽象类,子类去继承GenericServlet,GenericServlet就称为适配器,后续使用就继承GenericServlet
ServletConfig对象在init调用时创建,但是是局部的,后续用的时候可能出问题,这里我们创建了一个变量
源码部分:
GenericServlet.java private ServletConfig config; @Override public final void init(ServletConfig Config) throws ServletException { this.config = Config; this.init(); } public void init(){ //后续调用时如果用这个创建,不会破坏config对象 } @Override public ServletConfig getServletConfig() { return this.config; }
#### 3.4 Servleconfig接口详解 - 存放的配置信息,在tomcat 启动是创建servlet对象之后,创建Servletconfig对象 - 主要方法 | string | getInitParameter(string name) | 返回name对应的value | | ------------------- | ----------------------------- | ---------------------------------------- | | Enumeration| getInitParmeterNames() | 返回一个集合存放所对应的配置里的所有name | | ServletContext | getServletContext() | 返回一个Servlet对象 | | String | getServletName() | |
3.4 Servleconfig接口详解
存放的配置信息,在tomcat 启动是创建servlet对象之后,创建Servletconfig对象
主要方法
string | getInitParameter(string name) | 返回name对应的value |
---|---|---|
Enumeration |
getInitParmeterNames() | 返回一个集合存放所对应的配置里的所有name |
ServletContext | getServletContext() | 返回一个Servlet对象 |
String | getServletName() |
3.5 ServletContext
相当于一个容器对象,在一个xml配置信息中,所有的共享一个ServletContext对象,以便后续获取数据
tomcat 对这个对象进行了实现
有那些常用的反法?
String getInitParameter(String name) //通过初始化参数的name获取value EnumerationgetInitParameterNames() //获取所有初始化参数的name //实例代码 Enumeration initParameterNames = servletContext1.getInitParameterNames(); while (initParameterNames.hasMoreElements()){ String name = initParameterNames.nextElement(); String value = servletContext1.getInitParameter(name); out.print(name+"="+value+"
"); }
//获取路径(这里应该是相对的) getContextPath() //获取从绝对路径 getRealPath() //打印日志 log("message") /*message会在Using CATALINA_BASE: "C:\Users\lx\AppData\Local\JetBrains\IntelliJIdea2022.1\tomcat\d2c2fc4b-55e9-4c55-aa7a-c5f51a54a660"路径下的logs文件夹里生成文件存放message;*/
//servletContext对象还有另外一个名字:应用域(后面还有其他域,请求域,会话域) //如果所有的用户共享一份数据,并且这份数据很少被修改,并且数据量很少,可以将这些数据放到ServletContext应用域中 //存(如何向ServletContext应用域中存数据) public void setAttribute(String name,Object value) //取(如何向ServletContext应用域中取数据) public Object getAttribute(String name) //删(如何向ServletContext应用域中删除数据) public void removeAttribute(String name)
3.6注
以后写的Servlet类的时候,实际不会直接继承GenericServlet类,因为是B/S结构的系统,这种系统是基于HTTP超文本传输协议的,在Servlet规范中,提供了一个类叫HttpServlet,这是专门为HTTP协议准备的Servlet类,这个HttpServelt继承了GenericServlet类
HTTP的请求协议(B->S)
HTTP的请求协议包括4部分
请求行
请求头
空白行
请求体
具体报文get
GET /servlet04/get?username=java&password=123 HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Accept-Encoding: gzip, deflate, br, zstd Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Connection: keep-alive Host: localhost:8080 Referer: http://localhost:8080/servlet04/ Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: same-origin Sec-Fetch-User: ?1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows"
具体报文post
POST /servlet04/post HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Accept-Encoding: gzip, deflate, br, zstd Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cache-Control: max-age=0 Connection: keep-alive Content-Length: 29 Content-Type: application/x-www-form-urlencoded Host: localhost:8080 Origin: http://localhost:8080 Referer: http://localhost:8080/servlet04/ Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: same-origin Sec-Fetch-User: ?1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows"
URL和URI
URL:统一资源定位符。代表网络中某个资源
URI: 统一资源标识符。代表网络中某个资源的名字
URL包括URI
get请求和post请求的区别
get请求发送数据的时候,数据会挂载到URI后面,并且在URI后添加?,?后面是数据,这样导致发送的数据回显在浏览器的地址栏中
post请求发送数据的时候,在请求体中发送,不会回显到地址栏中
get只能发送普通的字符串,并且发送的字符串有长度限制(无法发送大数据量)
post请求可以发送任何类型的数据量
get比较适合从服务端获取数据
post比较适合向服务端传送数据
get请求比较安全,只是从服务器获取数据,不会对服务器造成威胁
post请求比较危险,post是向服务器提交数据,如果这些数据通过后面被拦截
get请求支持缓存
post请求不支持缓存
如何选择 get和post请求
向服务器提交数据用post请求,form表单基本上都是post,如果表单中有敏感信息,还是建议用post,因为get会回显,文件上传用post
其他情况用get
HTTP的响应协议(S->B)
HTTP的响应协议
状态行
响应头
空白体
响应体
具体报文
HTTP/1.1 200 //状态行 Content-Type: text/html;charset=UTF-8 响应头 Content-Length: 144 Date: Mon, 09 Dec 2024 13:42:40 GMT Keep-Alive: timeout=20 Connection: keep-alive 空白行 响应体from get servlet from get servlet
状态行:第一部分(版本协议号)
第二部分状态码(不同的状态码对应不同的响应结果)
如200表示响应·成功
404表示访问资源不存在,通常是路径写错了或者是服务器中对应资源没有启动成功
405表示前端发送的请求方式与后端的请求处理方式不同,如前端是post请求,后端按照get方式处理或者是
前端是get请求,后端按照post方式处理;
500:服务器的程序异常
响应头:响应的内容类型,响应的内容长度,响应的时间
4.1HttpServlet源码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String msg = lStrings.getString("http.method_get_not_supported"); this.sendMethodNotAllowed(req, resp, msg); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String msg = lStrings.getString("http.method_post_not_supported"); this.sendMethodNotAllowed(req, resp, msg); } //这两个是httpServlet中的方法,当有get或者是post请求时,去执行相应的方法,如果子类没有重写这相应的方法,而且发生了相应的请求,则报405错误 //就是若执行父类的doget或者dopost方法则报错
4.2设置webapp欢迎页
1.首先编写 login.html(或者servlet也可以)
2.添加项目依赖
3.在web.xml中添加
login.html
4.3 Request常用方法
MapparameterMap =request.getParameterMap(); Enumeration name =request.getParameterNames(); String Values= request.getParameterValues("name"); String values=request.getParameter("name");
请求域对象的三个方法
void setAttribute(String name, Object obj);//向域中绑定数据 Object getAttribute(String name);//从域中根据name获取数据 void removeAttribute(String name);//将域中的绑定数据移除
转发器
Request.getRequestDispatcher("路径(不含项目名)").forword(request,response)
4.4转发和重定向
转发的代码
request.getRequestDispatcher("路径(不含项目名)").forword(request,response)
重定向的代码
response.sendRedirect("这个路径要包含项目名+/b");
转发是一次请求,两个页面之间转发,共享一个request,response,所以当两页面需要用同一组数据用转法否则用重定向,大多数还是用重定向
而重定向是两次请求,当servlet1 重写了doget,而servlet2重写了dopost。这时使用转发会报405错误,而重定向则不会
5.1jsp是什么?
jsp(Java servlet page) 其实就是一个servlet ,编写的jsp,服务器将jsp文件生成java文件,编译成class文件。
5.2基本语法
1.<% ??? %> //这个里面可以编写java代码,写的代码加载到service方法中 2.注释<%-- ??? --%> 3.<%! ??? %> //这里面写的java代码加载到类体里(基本不用) 4.jsp 输出语句 <% out.write("name=" +name); %> jsp内置九大内置对象out 5.<%= ??? %>这里编写的代码加到service中,翻译成out.print(???); 一般用输出变量是 6<%@ page contentType="text/html;charset=UTF-8" language="java" %> 配置文件
编写的代码在C:\Users\lx\AppData\Local\JetBrains\IntelliJIdea2022.1\tomcat\d2c2fc4b-55e9-4c55-aa7a-c5f51a54a660\work\Catalina\localhost\jsp\org\apache\jsp
这个位置生成了java文件,并编译了class文件
5.3jsp九大内置对象
jakarta.servlet.jsp.PageContext pageContext
jakarta.servlet.http.HttpServletRequest request
jakarta.servlet.http.HttpSession session
jakarta.servlet.ServletContext application
jakarta.servlet.jsp.JspWriter out
jakarta.servlet.http.HttpServletResponse response
jakarta.servlet.ServletConfig config
java.lang.Object page
Exception
5.4jsp指令
<% @ 指令名 属性名=“属性值”%>
page指令常见属性:
import="{package.class | package.*}, ..."
session="true | false"
errorPage="relative_url"
isErrorPage="true | false"
contentType="mimeType ;charset=characterSet " | "text/html ; charset=ISO-8859-1"
pageEncoding="characterSet | ISO-8859-1"
isELIgnored="true | false"
JSP支持标签技术,要使用标签技术就先得声明标签库和标签前缀。taglib指令就是用来指明JSP页面内使用标签库技术
6.1session对象作用
主要是保存会话状态(用户登录成功算一次会话状态)一次会话包含多次请求
一次会话对应一个session对象(关闭浏览器算一次会话)
6.2为什么不用request或ServletContext?
request生命周期太短
而ServletContext域太大,而且是多个用户共享一个ServletContext对象
6.3session实现原理
在web服务器中有一个session列表,类似于map集合,这个map集合的key存储的是sessionid(以Cookie的形式保存的,浏览器关闭cookie就消失了 ),这个map集合的value存储的对应是session对象
用户发送第一次请求,服务器生成session对象同时给session对象生成一个sessionid
,并且给这个sessionid发送给浏览器,浏览器将id存放到缓存中
用户发送第二次请求,将浏览器中的缓存中的sessionid自动发给服务器,服务器根据sessionid找到对应的session对象
注:cookie禁用之后,每次访问都是新的session对象,要想使用就使用URL重写机制
6.4使用
HttpSession hs= request.getSession(); //用户访问session对象,没有则在服务生成session对象及sessionid HttpSession hs= request.getSession(false); //这种是直接访问,没有则返回null session.invalidate();//销毁session //这仨方法和ServletContext,,request使用方法一样 session.setAttribute(); session.getAttribute(); session.removeAttribute();
session的实现原理中每一个session对象对应一个sessionid
JSESSIONID=3D53D6E5AA202281A0A6F14C48278B60
这个键值对就是一个Cookie对象
只要浏览器不关闭,用户再次发送请求,会自动将运行内存中的cookie发给服务器
Cookie作用
和session一样都是为了保存会话状态
cookie将会话状态保存到浏览器客户端
session将会话状态保存到服务器端
使用方法
Cookie cookie=new Cookie(name,value);//创建一个cookie对象 - setMaxAge(),设置cookie有效期 - 0,表示删除同名cookie - 大于0,表示cookie存储到硬盘中 - 小于0,表示cookie存储到浏览器内存中 setPath(request.getContextPath());//设置路径,及在这个路径和其子路径都会生成cookie - response.add(cookie) request.getCookie(); getname(),getvalue();
EL(Expression Language)表达语言
EL表达式可以代替jsp中的java代码,让jsp文件中的程序看起来更美观
主要作用
从作用域中取数据,然后将其转字符串,然后将其输出到浏览器
使用
<%@ page import="org.scidag.jsp.bean.User" %> <%@page contentType="text/html; charset=UTF-8" %> //体验EL表达式,最基本的
<% request.setAttribute("name","zhangsan"); User user=new User(); user.setAge(18); user.setName("li"); user.setSex(false); request.setAttribute("user",user); %> ${name}
${user} ${user.age}<--这里其实就是取调用了user的getAge()方法--> ${user.name} ${user.sex}
${user["sex"]} ${user["age"]} ${user["name"]}
在四个域中,如果名字相同,则优先去小的域取数据
可以使用这四个名称指定域
PageScope
RequestScope
SessionScope
ApplicationScope
使用“\${user}“,可以忽略EL表达式
通过EL表达式获取应用的根
${pagecontext.request.contextPath}
JSP中EL表达式的隐式对象
pagecontext
param
paramValues
initParam
.....
EL表达式的运算符
算数运算符 + - * / %
关系 ==
逻辑
条件
取值 . []
empty (判断是否为空,为空则是true)
java standard tab lib
java标准的标签库
通常和EL表达式一起使用,为了让jsp文件中的java代码消失
使用步骤
引入jar包
page引入标签库<% @taglib prefix="" uri ="urI"%>
常用的标签(core核心标签库)
foreach
if
choose
相当于if
else if
else