JDBC
使用eclipse连接数据库:window——show view——data Source Exploer
JDBC API常用接口
DriverManager 负责加载各种不同驱动程序(Driver),并根据相应的请求,向调用者返回相应的数据库连接(Connection)
Driver 驱动程序,会将自身加载到DriverManager中去,处理相应的请求并返回相应的数据库连接(Connection)
Connection 数据库连接,负责与数据库通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement
Statement 用以执行SQL查询和更新(针对静态SQL语句和单次执行)
PreparedStatement 用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)
CallableStatement 用以调用数据库中的存储过程
ResultSet 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对象
JDBC连接数据库
?创建一个以JDBC连接数据库的程序,包含7个步骤:
1、加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
这通过java.lang.Class类的静态方法forName(String className)实现。
例如:
try{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类 ,加载驱动失败!");
e.printStackTrace() ;
}
成功加载后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL
?连接URL定义了连接数据库时的协议、子协议、数据源标识。
?书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为
gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。
3、创建数据库的连接
?要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,
该对象就代表一个数据库的连接。
?使用DriverManager的getConnectin(String url , String username ,
String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和
密码来获得。
例如:
//连接MySql数据库,用户名和密码都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("数据库连接失败!");
se.printStackTrace() ;
}
4、创建一个Statement
?要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3
种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句
,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或
DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的
语句。
具体实现的代码:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、处理结果
两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
? ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
? 使用结果集(ResultSet)对象的访问方法获取数据:
while(rs.next()){
String name = rs.getString("name") ; //传递列名
String pass = rs.getString(1) ; // 此方法比较高效 按照列号排列
}
(列是从左到右编号的,并且从列1开始)
Rs.getXXX()的方法,XXX取决于列名的数据类型
7、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
if(rs != null){ // 关闭记录集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 关闭声明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 关闭连接对象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
存储过程:
Create procedure test
Call test (1,@inf):调用存储过程
JDBC 调用存储过程:
CallableStatement cs=conn.prepareCall(“call test(?,?)”);
Cs.setInt(“id”(参数名),1);
Cs.registerOutParameter(“inf”,Types.VARCHAR);//获取第二个问号的参数,参数名及参数类型
Cs.execute();
批处理:
事务:
注入攻击:
Select * from test where username=”yulong” and password=”123 or 1=”1”;
的结果和Select * from test where username=”yulong” and password=”123相同
防范注入攻击:
String sql=”insert into test values (?,?,?);
PrepareStatement ps=conn.prepareStatement(sql);
Ps.setInt(1,8);
Ps.setString(“name”,”yuling”);
Ps.setString(“password”,”123”);
Ps.executeUpdate();
参数的值用?表示,然后给?赋值。
连接池:
享元模式:预先定义好的对象,可以多人使用
数据源:存有许多连接的连接池 dataSource 通过数据源去访问数据库,由数据源来决定具体使用哪个连接。
Tomcat创建数据源 将数据库驱动加入到tomcat的lib中。
在web.xml文件中配置<resource-ref>
properties文件:键值对 存储常用的值,不必重复的书写
java的类反射机制:
通过对象获取所有类的信息 Class.forName();
Modifier:所有通过类反射获取的信息的权限修饰符
Fields:用与存储类信息中的成员变量
getDeclaredFields:返回Class实例所代表的类的成员变量
getDeclaredMethods():;返回Class实例所代表的类的所有方法
调用私有的成员变量或方法:
先获取,后调用setAccessible(true)屏蔽权限修饰符
Web开发的特点(B/S):
constructor:存储类信息的构造方法
getConstructors();返回Class实例所代表的类的构造方法
method:存储类信息的所有方法
1. b/s对客户端要求低,有利于项目的升级和维护。
2. Web项目可以跨平台。
3. 界面不怎么好。Html+js+css extJS Flex可解决简陋的问题。
4. 对网络的依赖较大。
Web开发的常用技术:Jsp AspNET PHP
JSP:java在网络中的应用的 开源的 跨平台
(QQ是装在客户端的,它的升级需要客户手动下载软件,而网易只要通过浏览器就可以访问,升级,更新等在服务器端操作。c/s在不同的操作系统上需要研发不同的客户端软件才能使用,而b/s只要有浏览器和网络即可。)
Javaweb
定义:javaweb 由一组Servlet、html、类及其它被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的Servlet容器中运行
Java代码写在<% %>中
创建第一个web应用程序:
Web项目——WEB-INF——classes——带有包文件夹的class文件
——lib
——web.xml
——jsp文件
——html文件
——图片……..
将文件放到tomcat的webapps目录下,启动tomcat服务器运行。
配置虚拟目录:
在tomcat下 conf下server.xml文件中设置Content元素。
操作中的错误:
Class文件要带着包的文件夹一起放到classes文件夹下。
用eclipse开发web项目:
Window——show view——other——java——package explorer
Window——show view——other——server——tomcat6——导入tomcat地址
New——deymamic web project
设置默认路径:项目右击——build Path——Source——Default output folder设置到classes下
设置捷径:shortcuts
Window——Customize Perspective——shortcuts
基本操作:
将一段代码引入到try catch语句内:
选中语句——右击——surround with——try catch block
JSP
1.why:jsp是Servlet编写技术。它是在html语句中混合java代码,只对网页中要动态产生的内容采用java代码来编写,对固定不变的的静态内容采用普通的html语句编写。
2.
3.jsp页面可以放在除了WEB_INF及其子目录外的其它任何目录。
4. jsp页面的运行原理:jsp本质上是一个Servlet
每个jsp页面在第一次访问时,jsp引擎将它翻译成一个Servlet源程序,再编译成Servlet的class文件。再由web容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由jsp页面翻译成的Servlet程序。
5.jsp 页面的隐含变量:没有声明就可以使用的对象,jsp页面共有9个隐含对象。
Publicvoid_jspServlet(HttpServletRequest,HttpServletResponse)throws java.io.IOException,ServletException{
PageContext pageContext=null;
HttpSession session=null;
ServletContext application=null;
ServletConfig config=null;
JspWriter out=null;
Object page=this;
}
1.request:HttpServlet的一个对象
2.response:HttpServlet的一个对象(在jsp页面中几乎不调用response的任何方法)
3.pageContext:页面的上下文,是pageContext的对象。可以从该对象中获取其它8个隐含对象。也可以获取当前页面的其它信息(学习自定义标签时使用它。)
4.session:代表浏览器和服务器之间的一次会话,是HttpSession的一个对象。
5.application:代表当前web应用,是ServletContext对象。
6.config:当前jsp对应的Servlet的ServletConfig对象(几乎不用)
7.out:JspWriter对象,调用out.println()可以直接把字符串打印到浏览器上。
8.page:指向当前jsp对应的Servlet对象的引用,是Object类型,只能调用Object类的方法(几乎不使用)
9.exception:只有在声明了page指令的isErrorPage=”true时,才可以使用。
对属性作用域的范围的从小到大:pageContext,request,ession,application
使用<% %> 编写的代码在此位置,可以用到request,response,pageContext,session,application,config,out,page这8个隐含对象。(还可以使用exception隐含对象)
模板元素
定义:jsp页面中的静态html内容。
更改jsp页面中的编码方式:window——输入jsp——JSP Fles——该为UF8
Jsp中的输出语句:<%= %>
Jsp脚本片段是嵌套在<% %>之间的java代码。
Jsp中的注释:<%-- jsp注释 --%> <!—html注释 -->
两个注释的区别:jsp注释可以阻止java代码的执行。而html注释不可以。
和属性相关的方法:
1.方法:
Object getAttribute(String name):获取指定的属性
Enumeration getAttributeNames():获取所有属性名组成的Enumeration对象。
RemoveAttribute(String name):删除指定的属性
Void setAttribute(String name,Object o):设置属性
2.pageContext,request,session,application对象都有上述四个方法。这四个对象也称为域对象。
pageContext:作用于当前页面
Request:作用于同一个请求(在有转发的情况下可以跨页面获取属性值)
Session:作用于一次会话:浏览器从打开到关闭称为一次会话。(前提:会话不失效)
Application:作用于当前web应用程序,属性的作用范围最大,只要在一处设置属性,在其它各处的jsp或Servlet中都可以获取到。
2s后跳转到login页面:Response.setHeader(“refresh”,”2 url=”login.jsp”);
请求重定向与请求转发
相同点:两者请求的结果是相同的
本质区别:
请求的转发:只发出了一次请求,
重定向:发出了两次请求,
具体分析:
1. 请求的转发:地址栏是初次发出的地址 服务器将请求转发到其他的服务器资源
重定向:地址栏不再是初次发出的请求地址,地址栏为最后响应的地址
2. 请求的转发:在最终的Servlet中,request对象和中转的那个request对象是同一个对象
重定向:在最终的Servlet中,request对象和中转的那个request对象不是同一个对象
3. 请求的转发:只能转发给当前web应用的资源
重定向:可以重定向到任何资源。百度什么的
4.请求的转发:/ 代表当前web应用的根目录
重定向:/ 代表当前web站点的根目录
5.请求的转发代码:
RequestDispatcher接口
1.调用HttpServletRequest的getRequestDispatcher()方法获取RequestDispatcher对象
调用getRequestDispatcher()需要传入转发的地址
2.调用httpServlet的forward(request,response)进行请求转发
*/
String path="testServlet";
RequestDispatcher rd=request.getRequestDispatcher("/"+path);
rd.forward(request,response);
请求的重定向代码:
String path="testServlet";
response.sendRedirect(path);
注:当前web应用的目录:http://localhost:8080/r141028/
站点的根目录:http://localhost:8080/
参数是由浏览器发送到服务器时 表单中的信息,用getParameter() 获取
在服务器内部设置参数和获取参数时,用setAttribute(),和getAttribute()
Jsp指令
在目前jsp 2.0中,page include taglib指令
Page指令
<%@ page
langue=”java”
Extends=”package.class” 被编译成servlet类时要继承的类
Session=”false” 此时当前页面不可以使用session的隐藏变量,不生成HttpSession对象
iserrorPage=”true’ 指定当前页面是否为错误处理页面,可以使用exception对象,此时不建议直接访问该页面
import=“java.util.Date”
errorPage=”/error.jsp” 指定当前页面出现错误时的响应页面,响应该页面时,jsp引擎使用了请求转发的方式。
contentType=”text/html;charset=gb2312” 当前页面的响应类型,charset指定返回页面的字符编码
pageEncoding=”uf8” 指定当前页面的字符编码,一般和charset的值一致。
isElgnored=“true” 指定当前页面是否可以使用EL表达式
%>
如何让用户不能直接访问某个页面:
对于Tomcat服务器,WEB-INF下的文件不能通过在浏览器中直接输入地址的方式来访问页面的,但通过请求的转发是可以访问的。
errorPage=”…/WEB-INF/error.jsp”
<%@ page contentType=”application/msword”%>以word文档的格式响应
可以在web.xml文件中配置错误页面
Include指令
静态包含:先包含再翻译 生成一个servlet源文件
<%@ include file=”b.jsp”>
File属性的设置值用相对路径:
若以/开头,表示相对于当前web应用程序的根目录,否则表示相对于当前文件。
jsp:include标签
有子标签:jsp:param
动态包含:先翻译再包含 生成两个servlet源文件
<jsp:include page=”b.jsp”></jsp:include>
Include指令和jsp:include标签的区别:
<jsp:include>标签:是在当前jsp页面执行期间插入被引入资源的输出内容,被静态引入的资源必须是一个能独立被web容器调用和执行的资源。
Include指令:只能引入遵循jsp格式的文件,被引入文件与当前jsp文件共同被翻译成一个Servlet的源文件
<jsp:include page="/include2/b.jsp">
<jsp:param value="include" name="username"/>
</jsp:include>
接收参数
<%=request.getParameter("username") %>
Jsp:forward标签 请求转发
有子标签:jsp:param
<jsp:forward page="/include/b.jsp">
<jsp:param value="include" name="username"/>
</jsp:forward>
<!-- 作用相同 -->
<%
request.getRequestDispatcher("/include/b.jsp").forward(request, response);
%>
关于中文乱码问题
1.在jsp页面中输入中文,请求页面后不出现乱码
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
charset和pageEncoding的编码一致,且都支持中文,一般用UTF-8
浏览器的显示字符编码和 请求的jsp页面的编码一致。
2.获取中文参数值:默认参数在传输过程中使用的编码为ISO-8859-1
1)对于post请求,在获取请求信息之前(在调用request.getParameter或者是request.getReader等),调用以下方法
request.setCharacterEncoding("UTF-8");
2)对于get请求,前面的方式无效。可以修改Tomcat的server.xml文件
参照http://localhost8080/docs/config/index.html文档的useBodyEncodingForURI属性为Connector节点添加useBodyEncodingForURI=“true”属性
<Connector connectionTimeout=”20000” port=”8080” protocol=”HTTP/1.1” redirectPort=”8443” useBodyEncodingForURI=“true”>
----- response.setContentType("text/html;charset=GBK");
//解决post方式提交内容的乱码
//一定要写在存取第一个参数之前
request.setCharacterEncoding("GBK");
Cookie
用户通过浏览器第一次发送请求时,服务器在用户的机器上存储Cookie文件
Cookie的发送:
1. 创建Cookie对象
2. 2.设置Cookie存在的最大时效
3. 将Cookie放入到http响应报头
Cookie在浏览器的内存中,用户退出浏览器后被删除
若希望浏览器将Cookie存储在磁盘上,用maxAge,以秒为单位,maxAge=0 使浏览器删除该cookie
会话Cookie和持久Cookie的区别:
会话Cookie:保存在内存中 不设置过期时间 生命周期为浏览器的会话期间 关闭浏览器窗口,cookie消失
持久Cookie:保存在硬盘上 设置过期时间 关闭浏览器后再次打开,cookie仍然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,不如IE的两个窗口,保存在内存中的cookie额,不同的浏览器有不同的处理方式
Cookie :
1. 是完成会话跟踪的机制,采用了在客户端保持http状态的方案;
2. Cookie是在浏览器访问服务器的某个资源时,由web服务器在http响应消息头中附带传送给浏览器的一个小文本本件;
3. 一旦服务器在浏览器上保存了某个Cookie,浏览器在以后的访问中,都会在http请求头中将这个Cookie传递给服务器。
4. 底层的实现原理:web服务器通过在http响应消息中增加Set-cookie响应头字段将Cookie信息发送给浏览器,浏览器通过在http请求消息中增加Cookie请求头字段将Cookie回传给服务器。
2.Cookie相关的API:
11.向客户端浏览器写入Cookie
Cookie cookie=new Cookie(“name” “sss”);//创建Cookie对象,Cookie是键值对的形式
Cookie.setMaxAge(30);//设置Cookie存在的最大时效,0,表示立即删除该Cookie,负数,表示不存储该cookie。正数,表示该Cookie存在的时间
Cookie.setPath(request.getContextPath());//设置Cookie的作用范围
:可作用当前目录和当前子目录,但不能作用于当前目录的上一级目录。
Response.addCookie();//将Cookie传到客户端
12.从浏览器获取Cookie
Cookie [] cookies=request.getCookies();
If(Cookies!=null&&cookies.length>0){
For(Cookie cookie:cookies){
Out.print(cookie.getName()+”:”+cookie.getValue());
}
}
应用:自动登录 显示浏览过的商品信息
session会话
在服务器端创建session,将sessionID保存在客户端的session Cookie里,客户端和服务器端都有session
用来在客户端和服务器端之间保存状态
当客户端向服务器第一次发送请求时,服务器端会创建一个session,并将sessionID返回给客户端存到session Cookie中,当客户端再次向浏览器发送请求时,连带将sessionCookie中存储的sessionID发送给服务器,如果服务器中有一个SessionID可以与之匹配,则表明是一个会话,服务器认识这个浏览器。
由于sessionCookie是存储在浏览器内存中的,浏览器关闭sessionID也消失,即使服务器中的session存在,这个会话也结束。
浏览器中的sessionID存在,但是超过了服务器中session的过期时间。会话结束
1. HttpSession:在服务器端保持http状态信息的方案,和其对应的是Cookie
2. 2产生httpSession对象的过程
Session的生命周期:
1. 何时创建httpSession对象
11.当浏览器访问服务器的任何一个Jsp或者Servlet时,服务器都会创建一个HttpSession对象,对吗?不一定。
对于jsp:1.如果客户端第一次访问某个Jsp,且jsp页面中的page标签指定的session属性为false,此时服务器不会创建HttpSession对象;
2.如果当前Jsp不是客户端第一个访问的,而是由其它页面跳转过来的,且前面访问的其它页面已经创建了一个HttpSession对象,则当前页面会返回一个会话的ttpSession对象,不会再另外创建对象了。
对于Servlet:如果客户端第一次访问某个Servlet ,该Servlet只有在调用了request.getSession()或request.getSession(true)时才会创建HttpSession对象。
2. Session=”false”:表示当前页面禁用Session隐含变量,但可以使用其他的显示的HttpSession变量。
3.在Servlet中如何获取HttpSession对象?
Request.getSession(Boolean create):
Create为false:若没有和当前jsp页面关联的HttpSession对象,则返回null,若有,返回true。
Create为true:一定返回一个HttpSession对象,若没有和jsp页面关联的HttpSession对象,则服务器创建一个新的HttpSession对象并返回。若有直接返回。
何时销毁HttpSession对象?
1.直接调用HttpSession的invalidate()方法:该方法使HttpSession失效。
2.服务器卸载了当前web应用
3.超出HttpSession的过期时间。
注:关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器的session对象失效。
>>设置HttpSession的过期时间:
session.setMaxInactiveInterval(5);单位是秒。
>>在web.xml文件中设置HttpSession的过期时间:单位是分
<session-config>
<session-timeout>30</session-timeout>
</session-config>
并不是关闭了浏览器就销毁了HttpSession。
Session中最重要的方法:
获取session对象:request.getSession() request.getSession(boolean create)
属性相关的:setAttribute getAttribute removeAttribute
使httpSession失效的:Invalidate()
设置最大时效:setMaxInactiveInterval()
setAttribute和getAttribute
获取session:
HttpSession session=request.getSession(true);//true表示有session就用,没有就新创建
session.getID();//获取sessionID
session过期:浏览器的内存中sessionID还存在,但是服务器内存中的session已经被删除
服务器中的session存在,但是浏览器已关。
url重写实现Session跟踪
定义:将会话标识号以参数形式附加在超链接的url的值后面的技术。
在浏览器不支持Cookie或者关闭了Cookie功能的情况下,web服务器还能与浏览器实现有状态的会话,就必须对所有可能被客户端访问的请求路径进行url重写。
HttpServletResponse接口中定义的用于完成url重写的方法:
encodeURL方法 encodeRedirectURL方法
<a href="<%= response.encodeURL("login.jsp") %>">重新登录</a>
路径问题
Javaweb中的绝对路径:相对于当前web应用的根路径的路径,即在路径前必须带上contextPath。
Http://localhost:8080/contextPath(当前web应用的上下文路径)/a.jsp
http://localhost:8080/a.jsp 不是绝对路径
javaweb中的“/”代表什么?
当前web应用的根路径:http://localhost:8080/contextPath/
若“/”交由Servlet容器来处理
1. 请求转发时:request.getRequestDispatcher(“/path/b.jsp“).forward(request,response);
2. web.xml文件中映射的Servle。。。。。。。 。 t路径
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/testServlet<url-pattern>
</servlet-mapping>
Web站点的根路径:http://localhost:8080/
若“/”交由浏览器来处理
1. 超链接:<a href=“<%= request.getContextPath() %>/testServlet”>b.jsp</a>
2. 表单中的action:<form action=”/login.jsp”>
3. 请求重定向:response.sendRedirect(“request.getContextPath()/path/b.jsp);
如何编写绝对路径:
1. 若“/”代表当前站点的根目录,在斜杠前面加上contextPath。contextPath可以由request.getContextPath()来获取。
<a href=“<%= request.getContextPath() %>/testServlet >a.jsp</a>
<form action=” <%= request.getContextPath() %>/login.jsp”>
response.sendRedirect(“request.getContextPath()/path/b.jsp);
2. 若“/”代表当前web应用的根目录,则直接写绝对路径就可以了。
通过重定向服务器返回给浏览器的是url值。
需求:用Cookie显示最近浏览的5本书的title
Book.jsp 显示最近浏览的5本书
获取所有的Cookie
若CookieName==ATGUIGU_BOOK_开头,符合条件
显示CookieValue
Book.jsp 将数的信息以Cookie方式传递给浏览器,删除一个Cookie
确定要被删除的Cookie ATGUIGU_BOOK_开头的Cookie数量>=5,若从book.jsp页面传入的book不在ATGUIGU_BOOK_的Cookie中,则删除ATGUIGU_BOOK_数组的第一个Cookie,若在其中,则删除该Cookie
javaBean
1. 用作javabean的类必须有一个公共的无参的构造方法。
2. javabean的属性是以方法定义的形式出现的。而不是类中的成员变量。
即是Get和set方法名字后的内容
setName(){}。Property为name.
Javabean在jsp中的应用
Javabean必须存放在包中
<jsp:useBean id >标签
<jsp:setProperty property=””>
value和param不可同时出现 传递的参数名需和property相同,若不相同,可以用param接收
<jsp:getProperty>标签
El表达式
El(Expression Language):
语法:${ }
例:${sessionScope.user.sex}:从session范围中取得用户的性别。
以前的写法:
User user=(User)session.getAttribute(“user”);
String sex=user.getSex();
例:age:${sessionScope.customer.age}
等价于:
Customer customer=(Customer)session.getAttribute(“customer”);
Out.print(customer.getAge());
例:name:${sessionScope[“com.con”].name} com.con为session的键
如果域对象中的属性名带有特殊字符,则使用[]会很方便。
El变量:${name}
取出某一范围中名称为name的变量,按照从小到大的范围去找。Page。request。session。Application的顺序。若途中找到,则直接返回,不再找下去,若全部范围都没有找到,则返回null.
例:${customer.age}:从四个范围中依次寻找
El可以自动进行类型转换
在客户端使用javascript防止二次提交:
将表单中的提交按钮设置为按钮,用onclick调用js方法
在服务器端防止二次提交:
接收参数:String getParameter()
String [] getParameterValues()
String getAttribute()
11个el隐含对象:
1. PageContext:
与 范围有关的隐含对象:
2. PageScope:
3. RequestScope:
4. sessionScope:
5. applicationScope
与 输入有关的隐含对象:
6. param:如同ServletRequest.getParameter(String name),获取String类型的值
7. paramValues:如同ServletRequest.getParameterValues(String name)返回String[]类型的值
8. header:如同ServletRequest.getHeader(String name),返回String类型的值
9. headerValues: 如同ServletRequest.getHeaders(String name),返回String[]类型的值
10. cookie:如同HttpRequest.getCookies()
11. initParam:如同ServletContext。getInitParameter(String name),返回String类型的值。
Jstl的使用:下载jstl的jar包,将其中的standard.jar和jstl.jar放到lib下。