一、JSP中的两种include的区别
1、<%@include file="..."%>
2、<jsp:include page="..."/>
或者
<jsp:include page="...">
<jsp:param name="..." value="..."/>
</jsp:include>
其中方法1是先包含后处理,方法2是先处理再包含。
当用方法1时如果被包含的文件内有和主文件相同的变量定义,则会出错;方法2是将被包含文件中的代码处理后仅将结果包含进来。推荐使用方法2。
二、关于Tomcat服务器虚拟目录的配置
打开Tomcat的安装目录,进入conf/server.xml,在</host>上方加入
<Context path="/虚拟目录名" docBase="虚拟目录路径"/>
三、equls和==在Java中区别
equls是对内容的比较,==是对地址的比较。
技巧:在使用equls时应该使用 "字符串".equls(变量名)形式,可避免使用 变量名.equls("字符串") 在当变量名为null时会发生空指向异常。
四、JSP九种内置对象(内置对象 类型 作用域)
·与Servlet有关的隐含对象
config javax.servlet.ServletConfig page
page java.lang.Object page
·与Input/Output有关的隐含对象
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse page
out javax.servlet.jsp.JspWtiter page
·JSP执行时,提供有关Context的隐含对象
pageContext javax.servlet.jsp.PageContext page
session javax.servlet.http.HttpSession session
application javax.servlet.ServletContext application
·与Error有关的隐含对象
exception java.lang.Throwable page
五、两种跳转的区别
1、<jsp:forward page="..."/>
·地址栏不改变(服务器端跳转)
·执行到跳转语句后立刻五条件跳转,之后的代码不再执行
·如果使用forward跳转,一定要在跳转之前释放所有资源
·使用forward时,request设置的属性依然能保留在下一个页面(setAttribute)
·通过<jsp:param name="..." value="..."/>传递参数
2、response.sendRedirect(“...”);
·地址栏改变(客户端跳转)
·所有代码执行完毕之后再跳换
·不能保存request属性(地址改变了,客户端跳转)
·通过对URL地址重写传递参数
此外,在Servlet中使用这条语句实现jsp:forward跳转
Resquest.getRequestDispatcher("xxx.jsp").forwaor(req,resp);
六、web.xml的其他配置
<servlet>
<servlet-name>mldn</servlet-name>
<jsp-file>/WEB-INF/sdemo.jsp</jsp-file> (文件的路径)
<init-param>
<param-name>xxx</param-name>
<param-value>aaa</param-value>
</init-param>
<init-param>
<param-name>yyy</param-name>
<param-value>bbb</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mldn</servlet-name>
<url-pattern>/lxh</url-pattern> (浏览器中对应的地址,映射到上面的文件路径)
</servlet-mapping>
<welcome-file-list> (默认首页的设置)
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
init-param中的值通过config.getInitParameter("xxx")取得。
七、对数据库操作顺序
<%@ page import="java.sql.*"%>
1、加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
2、连接数据库
Connection conn = DriverManager.getConnection("jdbc:odbc:XXX") ;
3、操作数据库
Statement stmt = conn.createStatement() ;
stmt.executeUpdate("...") ;(插入、删除、更改)
ResultSet rs = stmt.executeQuery("...") ;(查询)
while(rs.next())
{
int id = rs.getInt("id");
Steing name = rs.getString("name");
...
int id = rs.getInt(1);
Steing name = rs.getString(2);
}
4、关闭数据库
rs.close()
stmt.close() ;
conn.close() ;
八、PreparedStatement
sql = "Insert INTO person (name,password,age) VALUES (?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,XXX);
pstmt.setString(2,YYY);
pstmt.setInt(3,ZZZ);
pstmt.executeUpdate();
九、光标和ResultSet参数(JDBC 2.0)
只读光标
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs.afterLast(); //光标移动到最后,等于rs.absolute(-1);
rs.absolute(3); //从第四条开始输出
rs.previous(); //向前滚动
可更新
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.last() ;
rs.updateString("name","...") ;
rs.updateString("password","...") ;
rs.updateRow() ;
插入
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.moveToInsertRow() ;
rs.updateString("name","...") ;
rs.updateString("password","...") ;
rs.insertRow() ;
删除
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.absolute(4) ;
rs.deleteRow() ;
以上操作都是将全部数据取出来在内存中定位,性能较差,不推荐使用,了解即可
十、批处理
try
{
stmt = conn.createStatement();
conn.setAutoCommit(false); //取消自动提交
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_A','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_B','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_C','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_D','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_E','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_F','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_G','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_H','zzzzzz',28)");
stmt.executeBatch(); //执行批处理语句
//如果没有异常,则执行此段代码
conn.commit(); //提交事务,真正向数据库中插入数据
}
catch(Exception e)
{
try
{
conn.rollback(); //将数据库回滚
}
catch(Exception e1)
{}
out.println("操作数据库失 败!!!");
}
十一、如何应用修改后的JavaBean
1、重启Tomcat服务器
2、修改Tomcat的conf/server.xml文件,在
<Context path="/虚拟目录名" docBase="虚拟目录路径" reloadable="true"/>
中加入红色部分属性。但会降低服务器性能,一般只在开发中使用。
十二、使用JavaBean
<jsp:useBean id="xxx" scope="yyy" class="zz.zz.zz.zz" />
<jsp:setProperty name="xxx" property="*" />
·name为已经声明过的JavaBean对象
·property为*表示自动匹配,也可指定单个变量
<jsp:setProperty name="xxx" property="a" param="b" />
·将获得的b的值传给a
<jsp:setProperty name="xxx" property="a" value="..." />
·将自定义的值传给a
<jsp:getProperty name="xxx" property="a" />
·取得变量a的值
scope四种范围:
page,只在当前页有效,适用于操作数据库
request,属性只保存在一次服务器跳转中,使用<jsp:forward>才可
session,属性保存在一次会话中,适用于开发购物车等
application,属性公有,此对象在整个服务器只实例化一次
十三、smartupload组件使用
HTML:
<form action="xxx.jsp" method="post" ENCTYPE="multipart/form-data">
JSP:
<jsp:useBean id="smart" scope="page" class="xx.xx.xx">
<%
// 1、初始化
smart.initalize(pageContext);
// 2、准备上传
smart.upload();
// 3、保存上传的文件
smart.save("/upload");
%>
*对于上传图片,因为一般比较大,只能使用post提交方式
如果表单被封装(使用ENCTYPE),则无法使用request直接取得输入参数,此时必须使用smartupload:
将smartupload.jar拷贝到tomcat/common/lib下
取得上传文件的扩展名称:smart.getFiles().getFile(0).getFileExt();
保存文件:smart.getFiles().getFile(0).saveAs("/upload");
十四、开启Tomcat的目录列表功能
打开conf/web.xml,找到
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
将listings下面的false改成true开启。
十五、设置Tomcat的管理密码
编辑conf目录的tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="admin"/> //添加
<role rolename="manager"/> //添加
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="..." password="..." roles="admin,manager"/> //添加
</tomcat-users>
1、<%@include file="..."%>
2、<jsp:include page="..."/>
或者
<jsp:include page="...">
<jsp:param name="..." value="..."/>
</jsp:include>
其中方法1是先包含后处理,方法2是先处理再包含。
当用方法1时如果被包含的文件内有和主文件相同的变量定义,则会出错;方法2是将被包含文件中的代码处理后仅将结果包含进来。推荐使用方法2。
二、关于Tomcat服务器虚拟目录的配置
打开Tomcat的安装目录,进入conf/server.xml,在</host>上方加入
<Context path="/虚拟目录名" docBase="虚拟目录路径"/>
三、equls和==在Java中区别
equls是对内容的比较,==是对地址的比较。
技巧:在使用equls时应该使用 "字符串".equls(变量名)形式,可避免使用 变量名.equls("字符串") 在当变量名为null时会发生空指向异常。
四、JSP九种内置对象(内置对象 类型 作用域)
·与Servlet有关的隐含对象
config javax.servlet.ServletConfig page
page java.lang.Object page
·与Input/Output有关的隐含对象
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse page
out javax.servlet.jsp.JspWtiter page
·JSP执行时,提供有关Context的隐含对象
pageContext javax.servlet.jsp.PageContext page
session javax.servlet.http.HttpSession session
application javax.servlet.ServletContext application
·与Error有关的隐含对象
exception java.lang.Throwable page
五、两种跳转的区别
1、<jsp:forward page="..."/>
·地址栏不改变(服务器端跳转)
·执行到跳转语句后立刻五条件跳转,之后的代码不再执行
·如果使用forward跳转,一定要在跳转之前释放所有资源
·使用forward时,request设置的属性依然能保留在下一个页面(setAttribute)
·通过<jsp:param name="..." value="..."/>传递参数
2、response.sendRedirect(“...”);
·地址栏改变(客户端跳转)
·所有代码执行完毕之后再跳换
·不能保存request属性(地址改变了,客户端跳转)
·通过对URL地址重写传递参数
此外,在Servlet中使用这条语句实现jsp:forward跳转
Resquest.getRequestDispatcher("xxx.jsp").forwaor(req,resp);
六、web.xml的其他配置
<servlet>
<servlet-name>mldn</servlet-name>
<jsp-file>/WEB-INF/sdemo.jsp</jsp-file> (文件的路径)
<init-param>
<param-name>xxx</param-name>
<param-value>aaa</param-value>
</init-param>
<init-param>
<param-name>yyy</param-name>
<param-value>bbb</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mldn</servlet-name>
<url-pattern>/lxh</url-pattern> (浏览器中对应的地址,映射到上面的文件路径)
</servlet-mapping>
<welcome-file-list> (默认首页的设置)
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
init-param中的值通过config.getInitParameter("xxx")取得。
七、对数据库操作顺序
<%@ page import="java.sql.*"%>
1、加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
2、连接数据库
Connection conn = DriverManager.getConnection("jdbc:odbc:XXX") ;
3、操作数据库
Statement stmt = conn.createStatement() ;
stmt.executeUpdate("...") ;(插入、删除、更改)
ResultSet rs = stmt.executeQuery("...") ;(查询)
while(rs.next())
{
int id = rs.getInt("id");
Steing name = rs.getString("name");
...
int id = rs.getInt(1);
Steing name = rs.getString(2);
}
4、关闭数据库
rs.close()
stmt.close() ;
conn.close() ;
八、PreparedStatement
sql = "Insert INTO person (name,password,age) VALUES (?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,XXX);
pstmt.setString(2,YYY);
pstmt.setInt(3,ZZZ);
pstmt.executeUpdate();
九、光标和ResultSet参数(JDBC 2.0)
只读光标
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs.afterLast(); //光标移动到最后,等于rs.absolute(-1);
rs.absolute(3); //从第四条开始输出
rs.previous(); //向前滚动
可更新
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.last() ;
rs.updateString("name","...") ;
rs.updateString("password","...") ;
rs.updateRow() ;
插入
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.moveToInsertRow() ;
rs.updateString("name","...") ;
rs.updateString("password","...") ;
rs.insertRow() ;
删除
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.absolute(4) ;
rs.deleteRow() ;
以上操作都是将全部数据取出来在内存中定位,性能较差,不推荐使用,了解即可
十、批处理
try
{
stmt = conn.createStatement();
conn.setAutoCommit(false); //取消自动提交
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_A','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_B','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_C','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_D','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_E','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_F','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_G','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_H','zzzzzz',28)");
stmt.executeBatch(); //执行批处理语句
//如果没有异常,则执行此段代码
conn.commit(); //提交事务,真正向数据库中插入数据
}
catch(Exception e)
{
try
{
conn.rollback(); //将数据库回滚
}
catch(Exception e1)
{}
out.println("操作数据库失 败!!!");
}
十一、如何应用修改后的JavaBean
1、重启Tomcat服务器
2、修改Tomcat的conf/server.xml文件,在
<Context path="/虚拟目录名" docBase="虚拟目录路径" reloadable="true"/>
中加入红色部分属性。但会降低服务器性能,一般只在开发中使用。
十二、使用JavaBean
<jsp:useBean id="xxx" scope="yyy" class="zz.zz.zz.zz" />
<jsp:setProperty name="xxx" property="*" />
·name为已经声明过的JavaBean对象
·property为*表示自动匹配,也可指定单个变量
<jsp:setProperty name="xxx" property="a" param="b" />
·将获得的b的值传给a
<jsp:setProperty name="xxx" property="a" value="..." />
·将自定义的值传给a
<jsp:getProperty name="xxx" property="a" />
·取得变量a的值
scope四种范围:
page,只在当前页有效,适用于操作数据库
request,属性只保存在一次服务器跳转中,使用<jsp:forward>才可
session,属性保存在一次会话中,适用于开发购物车等
application,属性公有,此对象在整个服务器只实例化一次
十三、smartupload组件使用
HTML:
<form action="xxx.jsp" method="post" ENCTYPE="multipart/form-data">
JSP:
<jsp:useBean id="smart" scope="page" class="xx.xx.xx">
<%
// 1、初始化
smart.initalize(pageContext);
// 2、准备上传
smart.upload();
// 3、保存上传的文件
smart.save("/upload");
%>
*对于上传图片,因为一般比较大,只能使用post提交方式
如果表单被封装(使用ENCTYPE),则无法使用request直接取得输入参数,此时必须使用smartupload:
将smartupload.jar拷贝到tomcat/common/lib下
取得上传文件的扩展名称:smart.getFiles().getFile(0).getFileExt();
保存文件:smart.getFiles().getFile(0).saveAs("/upload");
十四、开启Tomcat的目录列表功能
打开conf/web.xml,找到
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
将listings下面的false改成true开启。
十五、设置Tomcat的管理密码
编辑conf目录的tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="admin"/> //添加
<role rolename="manager"/> //添加
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="..." password="..." roles="admin,manager"/> //添加
</tomcat-users>