概述
在Java Web开发中,结合MySQL数据库使用Java Servlet技术是非常常见的一种方式。本文将给出完整的攻略,演示如何在本地环境下搭建Java Servlet和MySQL结合使用的开发环境,并提供两个示例进行说明。
环境准备
在开始之前需要安装以下组件:
- JDK
- Tomcat
- MySQL
配置Tomcat
- 下载Tomcat并解压到本地目录(假设是在
/usr/local
目录下):
$ tar xvzf apache-tomcat-8.5.x.tar.gz
- 进入Tomcat配置目录并修改配置文件:
$ cd /usr/local/apache-tomcat-8.5.x/conf
$ vim server.xml
在<Server>
标签内添加以下内容:
<GlobalNamingResources>
<Resource name="jdbc/mysql" auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
<Context path="/test" docBase="/usr/local/apache-tomcat-8.5.x/webapps/test">
<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>
</Service>
这段内容将在Tomcat中配置一个名为jdbc/mysql
的全局数据源,并在/test
上下文路径下进行引用。
配置MySQL
进入MySQL的配置文件目录,打开my.cnf
文件并添加以下内容:
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
重启MySQL服务以使更改生效:
$ /usr/local/mysql/support-files/mysql.server restart
编写Servlet代码
以下为两个示例,包含了Servlet代码和MySQL的操作:
示例1:插入数据
定义一个InsertServlet
用于向MySQL中插入数据:
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
@WebServlet("/insert")
public class InsertServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String gender = request.getParameter("gender");
try {
Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement("INSERT INTO user (name, gender) VALUES (?, ?)");
ps.setString(1, name);
ps.setString(2, gender);
ps.executeUpdate();
ps.close();
conn.close();
response.getWriter().println("Insert successfully!");
} catch (SQLException e) {
e.printStackTrace();
response.sendError(500);
}
}
private Connection getConnection() throws SQLException {
DataSource ds = getDataSource();
return ds.getConnection();
}
private DataSource getDataSource() {
PoolProperties p = new PoolProperties();
p.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8");
p.setDriverClassName("com.mysql.jdbc.Driver");
p.setUsername("root");
p.setPassword("root");
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
ds.setPoolProperties(p);
return ds;
}
}
以上代码涉及Servlet的处理、MySQL的数据插入操作和Tomcat的数据源配置。其中,getDataSource()
方法返回了一个Tomcat连接池的数据源。
示例2:查询数据
定义一个SelectServlet
用于从MySQL中查询数据:
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
@WebServlet("/select")
public class SelectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT * FROM user");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
response.getWriter().println(rs.getInt("id") + ", " + rs.getString("name") + ", " + rs.getString("gender"));
}
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
response.sendError(500);
}
}
private Connection getConnection() throws SQLException {
DataSource ds = getDataSource();
return ds.getConnection();
}
private DataSource getDataSource() {
PoolProperties p = new PoolProperties();
p.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8");
p.setDriverClassName("com.mysql.jdbc.Driver");
p.setUsername("root");
p.setPassword("root");
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
ds.setPoolProperties(p);
return ds;
}
}
以上代码涉及Servlet的处理、MySQL的数据查询操作和Tomcat的数据源配置。其中,getDataSource()
方法返回了一个Tomcat连接池的数据源。
运行和测试
- 将示例代码保存到Tomcat的
/webapps/test/WEB-INF/classes
目录下,然后启动Tomcat服务:
$ /usr/local/apache-tomcat-8.5.x/bin/startup.sh
-
分别在浏览器中访问以下URL,测试Servlet代码是否正常:
-
localhost:8080/test/insert?name=Tom&gender=Male
localhost:8080/test/select
结论
本文给出了Java Servlet结合MySQL的完整攻略,并提供了两个例子进行说明。这些操作包括Tomcat的配置、MySQL的配置和Servlet代码的编写。在这个过程中,我们还使用了Tomcat的连接池来实现数据源的配置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java servlet结合mysql搭建java web开发环境 - Python技术站