最近开始接触后端服务器,学习了如何创建servlet,在此记下备用。
注:本文将会介绍如何在IntelliJ IDEA上创建一个servlet,并部署到tomcat服务器。
注:本文仅供非后端人员应急使用,生产环境请进行系统的学习。
新建项目
启动IntelliJ IDEA后选择new - Project ,然后选择JAVA EE下的Web Application
输入项目名称,完成项目创建。
添加依赖
添加servlet依赖的tomcat的JAR包,在file-Project Structure中,选择Libraries , 然后点击绿色的加号,选择java,选择tomcat/lib/servlet-api.jar,跳过这一步在新建servlet时可能会导致缺少必要的文件。
创建数据库的操作类
本文创建的servlet用于提供接口操作数据库,首先需要创建数据库的操作类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//用于获得数据库的连接的类
class DBUtil {
//数据库地址:端口号/数据库名字
private static final String URL = "jdbc:mysql://127.0.0.1:3306/mysql?useUnicode=true&characterEncoding=utf-8";
//登陆数据库的账户名
private static final String USER = "usr";
//登陆数据库的密码
private static final String PASSWORD = "password";
private static Connection conn = null;
static void prepare(){
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库的连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//将获得的数据库与java的链接返回(返回的类型为Connection)
static Connection getConnection() {
prepare();
return conn;
}
}
【注意】加载驱动类Class.forName("com.mysql.jdbc.Driver")
需要导入jar包,我使用的版本是mysql-connector-java-5.1.46.jar
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//封装执行SQL语句的类,这里只写一个插入语句当作栗子
class DateBaseHelper {
static Map<String, Object> insertData(String sql) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
Map<String, Object> resultMap = new HashMap<>();
try {
conn = DBUtil.getConnection();
st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
PreparedStatement pst = conn.prepareStatement(sql);
pst.execute();
resultMap.put("errorCode", "0");
return resultMap;
} catch (Exception e) {
System.out.println(e.getMessage());
resultMap.put("errorCode", "-1");
resultMap.put("message", e.getMessage());
return resultMap;
} finally {
try {
if (st != null) {
st.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
创建servlet
在项目中右键src,选择New - Servlet,输入名称完成创建。
默认名称命名的Servler大概长这个样子:
doPost用来处理post请求,doGet处理get请求。
添加逻辑,处理get请求,接受userName参数,并写入数据库。
import com.alibaba.fastjson.JSON;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.util.Map;
@WebServlet(value = "/LogOn")
public class Servlet extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
response.setContentType("text/html; charset=utf-8");//如果出现输出中文乱码需添加这一行
PrintWriter out = response.getWriter();
String userName = URLDecoder.decode(request.getParameter("userName")==null?"":request.getParameter("userName"), "UTF-8");
Map<String,Object> resultMap;
String res;
if (!"".equalsIgnoreCase(userName)){
resultMap = DateBaseHelper.insertData("insert into user(user_name) values('"+userName+"');");
res= JSON.toJSONString(resultMap);
}else{
res="无效的用户名";
}
out.print(res);
}
}
【注意】要想正常访问Servlet有两种方式:
I.在web.xml中配置映射【参考文章】
II.Servlet3.0以上版本,在Servlet类上使用@WebServlet注解进行配置【参考文章】
@WebServlet(value = "/LogOn")
该注解的作用等价于在web.xml中配置的该servlet的元素中的配置,简单的说就是虽然文件名是servet.java,部署到服务器上以后,我只要访问括号里面的名字就能访问到这个servlet了。
编译打包
选择Build - Build Artifacts… , 弹出的action选择build ,等待 IntelliJ IDEA 编译完成。
在项目的out - artifacts 下会生成项目名_war_exploded 的目录,部署到服务器时就会用到这个目录。
部署到服务器
请参考我的另一篇博客,这里就不重复说明了
VII 部署servlet到tomcat