JSP学习笔记

一、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>
 

你可能感兴趣的:(JSP学习笔记)