您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
09-案例-添加(解决HTTP Status 405 - HTTP method POST is not supported by this URL问题)
发布时间:2024-12-04 14:51:56编辑:雪饮阅读()
-
基于上篇,接下来来实现品牌的添加,先做一个添加品牌的静态页面,并假定我们添加提交的目标servlet的url为/threeTierArchitectureModule/AddBrandServlet,并且我希望是post提交。
所以有addBrand.html如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加品牌</title>
</head>
<body>
<h3>添加品牌</h3>
<form action="/threeTierArchitectureModule/AddBrandServlet" method="post">
品牌名称:<input name="brandName"><br>
企业名称:<input name="companyName"><br>
排序:<input name="ordered"><br>
描述信息:<textarea rows="5" cols="20" name="description"></textarea><br>
状态:
<input type="radio" name="status" value="0">禁用
<input type="radio" name="status" value="1">启用<br>
<input type="submit" value="提交">
</form>
</body>
</html>
然后我们可以在之前brand.jsp的表格顶部加上一个添加品牌的链接
<a href="addBrand.html">添加品牌</a>
然后我们编写添加品牌的servlet,在此之前,这里可以了解下IntelliJ IDEA对于强转的便捷处理,就是当你写了一个如获取请求参数的值的语句,然后突然发现应该用int存储,改左侧变量类型为in,那么IntelliJ IDEA的感叹号点开后有几种解决方案,其中一种就是Wrap using’Integer.parseInt()’,这样你就不用写右边的Integer.parseInt去包裹处理,瞬间完成,挺方便。
那么接下来我们需要编写对于mapper接口的新增的映射抽象方法于BrandMapper.java中如
@Insert("insert into tb_brand(brand_name,company_name,ordered,description,status) value(#{brandName},#{companyName},#{ordered},#{description},#{status})")
void Add(Brand brand);
那么接下来我们需要完成之前的BrandService.java中新增一个添加品牌的服务方法
public void Add(Brand brand){
SqlSession sqlSession=sqlSessionFactory.openSession(true);
BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);
brandMapper.Add(brand);
sqlSession.close();
}
那么接下来我们实现添加品牌的servlet则如
package com.web;
import com.pojo.Brand;
import com.service.BrandService;
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 java.io.IOException;
@WebServlet("/AddBrandServlet")
public class AddBrandServlet extends HttpServlet {
BrandService brandService=new BrandService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String brandName=req.getParameter("brandName");
String companyName=req.getParameter("companyName");
int ordered= Integer.parseInt(req.getParameter("ordered"));
String description=req.getParameter("description");
int status= Integer.parseInt(req.getParameter("status"));
Brand brand=new Brand();
brand.setBrandName(brandName);
brand.setCompanyName(companyName);
brand.setOrdered(ordered);
brand.setDescription(description);
brand.setStatus(status);
brandService.Add(brand);
req.getRequestDispatcher("/ServletQueryAll").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
this.doGet(req,resp);
}
}
这里需要注意,如果你测试的时候发现添加报错如:
HTTP Status 405 - HTTP method POST is not supported by this URL
这可能不是你当前这个添加品牌的servlet的错误,而是你添加时候先从doPost接收然后又调用doGet,用doGet去forward到查询所有的ServletQueryAll的servlet中,但是这个ServletQueryAll的servlet并没有重写doPost方法,因为这个请求本质还是post请求,一开始我也是没有考虑到只知道转发到ServletQueryAll中就行了。所以ServletQueryAll的servlet中也要覆写下doPost去调用doGet。
package com.web;
import com.pojo.Brand;
import com.service.BrandService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet("/ServletQueryAll")
public class ServletQueryAll extends HttpServlet {
BrandService brandService=new BrandService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Brand> brands=brandService.selectAll();
request.setAttribute("brands",brands);
request.getRequestDispatcher("/brand.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
本期词汇
description 描述,形容
parse 解析
关键字词:405,post,method,案例,添加,not,supported,URL