pink_floyd
老友圈|VIP
UID 65888
精华
0
积分 14
帖子 202
书签 14 个
书币 16 枚
阅读权限 30
注册 04-11-23
|
[小喇叭]: 知识库:Asp.Net
C#
JSP
Java
PHP
C++/VC
ASP
VB
数据库
移动开发
Delphi
软件工程
JavaScript
XML
[原创]Tomcat与Java Web开发技术(学习笔记)
Tomcat与Java Web开发技术--笔记(pink floyd写于2004/11/2)
在使用tomcat时,有时提示:Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK的错误信息!这是因为在启动的时候没有读取JAVA_HOME这个环境变量,而是在配置里定义这个环境变量的,于是需要在Java Options里加入了一句:-Djava.home=d:\j2sdk1.4.2_04。(需要重新启动Tomcat)
Tomcat采用的是HTTP端口“8080”,如果想采用其他端口,可以在<CATALINA_HOME>/conf/server.xml中找到<Connector>元素的port属性值,然后修改就OK了!(需要重新启动Tomcat)
创建和发布Web应用:
在<CATALINA_HOME>/webapps目录下创建这个Web应用的目录结构/myapp(Web应用的根目录,所有的JSP和HTML文件都放在这边) /myapp/WEB-INF/web.xml /myapp/WEB-INF/classes(存放各种class文件,Servlet类文件也放在这个目录)/myapp/WEB-INF/lib(存放Web应用所需的各种JAR文件,例如JDBC驱动程序的JAR文件)
在<CATALINA_HOME>/conf/server.xml中增加<Context>元素
例如:在名为"localhost"的<Host>元素中加入<Context>元素:
<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
......
<Context path="/myapp" docBase="myapp" debug="0" reloadable="true"/>
</Host>
然后重新启动Tomcat
(在开发阶段,将reloadable属性设为true,但是在发布阶段设为false)
修改WEB-INF目录下的web.xml文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!--设置<servlet>和<servlet-mapping>元素-->
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>mypack.myservlet</servlet-class>
</servlet>
<servlet-mapping
<servlet-name>myservlet</servlet-name>
<url-pattern>/foo</url-pattern>
</servlet-mapping>
</web-app>
JSP语法
<%@ page language="java" %> 指定文件中所使用的脚本语言
<%@ page method="doPost" %> 指定Java程序片段所属的方法的名称
<%@ page import="java.io.*,java.util.Hashtable" %>
<%@ page content_type="text/html;charset=GB2312" %> 指定响应结果的MIME类型
<%@ page session="true" %>
<%@ page errorPage="errorpage.jsp" %> 当异常发生时,客户请求被重新定向到哪个网页
<%@ page isErrorPage="true" %> 表示此JSP页面是否为处理异常的网页
<%@ include file="relativeURL" %> 包含其他文件
<%! int i=0; %> 声明JSP代表的Servlet类的成员变量和方法
在<% 和 %> 标记间直接嵌入任何有效的JAVA语言代码
<%= 和%> 该表达式的值会显示在网页上
<%-- 和--%>可以进行注释
<jsp:forward page="重新定向的文件" />
JSP访问JavaBean的语法
<%@ page import="mypack.myBean" %> 导入JavaBean类
<jsp:useBean id="JavaBean的变量名" class="mypack.myBean" scope="session" /> 声明JavaBean对象
scope可以是page,request,session,application中的任一种
<jsp:getProperty name="JavaBean的变量名" property="count" /> 访问JavaBean的属性
<jsp:setProperty name="JavaBean的变量名" property="count" value="0" /> 设置JavaBean的属性
通过JDBC访问数据库
1.Class.forName("com.mysql,jdbc.Driver");
2.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3360/theDataBase",
"userName","userPaswd");
Connection.createStatement() 创建并返回Statement对象
Connection.prepareStatement(String sql) 创建并返回PreparedStatement对象
Statement用来执行静态的SQL语句
3. String sql ="select id, name, title, price from books where name='Tom' and price=40";
ResultSet rs = stmt.executeQuery(sql); //stmt 为Statement类
4. String selectStatement = "select id, name, title, price from books where name=? and price=?";
PreparedStatement prepStmt =con.prepareStatement(selectStatement);//con为Connection类
String name ="Tom";
float price = 40;
prepStmt.setString(1,name);
prepStmt.setFloat(2,price);
ResultSet rs = prepStmt.executeQuery();
5.while(rs.next())
{
String col1 = rs.getString(1); //or rs.getString("id");
String col2 = rs.getString(2);//or rs.getString("name");
String col3 =rs.getString(3);
String col4 = rs.getFloat(4);//or rs.getFloat("price");
//打印当前记录
}
6.事务处理
try{
con = DriverManager.getConnection(dbUrl,dbUser,dbPwd);
//禁止自动提交
con.setAutoCommit(false);
stmt=con.createStatement();
//数据库更新1
stmt.executeUpdate("update account set money=money-1000 where name='one'");
//数据库更新2
stmt.executeUpdate("update account set money=money+1000 where name='two'");
//事务提交
con.commit();
}catch(Exception e)
{
e.printStackTrace();
try{
//操作不成功就回滚
con.rollback();
}catch(Exception e)
{
e.printStackTrace();
}
}finally{
try{
stmt.close();
con.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
处理中文编码
JSP网页的编码要与数据库的取出的数据的编码一致!
例如:在JSP网页中使用GB2312中文编码
<%@ page contentType="text/html; charset=GB2312" %>
而MYSQL数据库的JDBC驱动程序的默认情况采用的是ISO-8859-1编码
所以要做相应的处理:
a. String dbUrl = "jdbc:mysql://localhost:3306/myDB?useUnicode=true&characterEncoding=GB2312";
采用这种方式从数据库中取出的数据使用的字符编码为GB2312
b. String col1= rs.getString(1);
String col2 = rs.getString(2);
String col3 = rs.getString(3);
float col4 = rs.getFloat(4);
col1 = new String(col1.getBytes("ISO-8859-1"),"GB2312");
|
|