持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
Servlet
获取参数
获取参数并添加到数据库中
AddServlet.java
package com.sentiment.servlets;
import com.sentiment.fruit.dao.impl.FruitDAOImpl;
import com.sentiment.fruit.pojo.Fruit;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class AddServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String fname = req.getParameter("fname");
String priceStr = req.getParameter("price");
Integer price = Integer.parseInt(priceStr);
String fcountStr = req.getParameter("fcount");
Integer count = Integer.parseInt(fcountStr);
String remark = req.getParameter("remark");
System.out.println(fname);
System.out.println(price);
System.out.println(count);
System.out.println(remark);
FruitDAOImpl fruitDAO = new FruitDAOImpl();
fruitDAO.addFruit(new Fruit(0,fname,price,count,remark));
System.out.println("添加成功");
}
}
add.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Servlet</title>
</head>
<body>
<form action="add" method="post">
名称:<input type="text" name="fname"><br/>
价格:<input type="text" name="price"><br/>
库存:<input type="text" name="fcount"><br/>
备注:<input type="text" name="remark"><br/>
<input type="submit" value="添加">
</form>
</body>
</html>
web.xml
<servlet>
<servlet-name>AddServlet</servlet-name>
<servlet-class>com.sentiment.servlets.AddServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddServlet</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
单击添加,添加成功
流程
1、点击添加时,action=add
2、找到url-pattren = /add
3、就找到了
<servlet-name>—>AddServlet4、servlet-mapping中的AddServlet对应了servlet的AddServlet
5、对应上之后找到了com.sentiment.servlets.AddServlet
6、发送post请求,并有AddServlet的doPost方法接收
设置编码
前边添加数据时,其实遇到一些问题,当添加中文名称时会出现乱码的情况,所以需要手动设置一下编码格式
POST
设置成UTF-8即可
req.setCharacterEncoding("UTF-8");
GET
GET方式麻烦一些,由于tomcat默认使用的是ISO-8859-1编码,所以需要先获取此编码的字节,之后再转换成UTF-8
String fname = req.getParameter("fname");
byte[] bytes = fname.getBytes("ISO-8859-1");
fname= new String(bytes,"UTF-8");
继承关系
继承关系
javax.servlet.Servlet 接口
javax.servlet.GenericServlet 抽象类
javax.servlet.http.HttpServlet 抽象子类
相关方法
javax.servlet.Servlet接口:
void init(config) - 初始化方法
void service(request,response) - 服务方法
void destory() - 销毁方法
javax.servlet.GenericServlet抽象类:
public abstract void service(request, response) - 仍然是抽象方法
javax.servlet.http.HttServlet 抽象子类:
void service (request,response) - 不是抽象的
看一下HttpServlet方法
①:获取请求方式 (一共有八种请求方式,这里以GET为例)
②:判断为GET后,执行getLastModified()方法,而这个方法默认返回值就是-1L
③:经过if判断之后调用了本类中的doGet方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String msg = lStrings.getString("http.method_get_not_supported");
this.sendMethodNotAllowed(req, resp, msg);
}
而本类中的doGet方法,相当于默认返回错误信息,该信息的值封装在http.method_get_not_supported中,而这些信息都在LocalStrings的配置文件中
因此为了避免报错,才需要我们在传入对应请求前,重写对应的do方法