老师,出现405错误怎么解决?
package com.ht.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Objects;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ServiceServlet
*/
public class ServiceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServiceServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletrequestuest requestuest, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(Objects.equals("/addCourse", request.getServletPath())) {
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String category = request.getParameter("category");
String desp = request.getParameter("desp");
boolean flag = AddCourse.addCourse(name, category, desp);
if(flag) {
response.sendRedirect(request.getContextPath()+"/SelectCourse");
}else {
response.sendRedirect(request.getContextPath()+"/jsp/fail.jsp");
}
if (Objects.equals("/SelectCourse", request.getServletPath())) {
ArrayList<Course> courses = SelectAccess.selectCourse();
request.setAttribute("courses",courses);
request.getRequestDispatcher("/jsp/index2.jsp").forward(request,response);
}
}
}
}package com.ht.test;
import java.util.Date;
/**
* id 课程编号
* name 课程名称
* category 所属方向
* desp 课程描述
* createTime 创建时间
* @author 24516
*
*/
public class Course {
private int id;
private String name;
private String category;
private String desp;
private Date crateTime;
/**
* 无参构造方法
*/
public Course() {
}
/**
* 带参构造方法
* @return
*/
public Course(int id, String name, String category, String desp, Date crateTime) {
this.id = id;
this.name = name;
this.category = category;
this.desp = desp;
this.crateTime = crateTime;
}
/**
* getter 和 setter方法
* @return
*/
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getDesp() {
return desp;
}
public void setDesp(String desp) {
this.desp = desp;
}
public Date getCrateTime() {
return crateTime;
}
public void setCrateTime(Date crateTime) {
this.crateTime = crateTime;
}
}package com.ht.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import org.junit.Test;
/**
* 获取所有课程的类
* @author 24516
*
*/
public class SelectAccess {
@Test
public static ArrayList<Course> selectCourse() {
//创建存储查询到的课程的集合
ArrayList<Course> list = new ArrayList<Course>();
Connection con = null;
PreparedStatement ps = null ;
ResultSet rs = null;
try {
//创建连接
con = Untils.getConnection();
//编写SQL语句
String sql = "select * from course";
//预编译SQL
ps = con.prepareStatement(sql);
//执行SQL
rs = ps.executeQuery();
//遍历结果集,存储到集合中
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String category =rs.getString("category");
String desp = rs.getString("desp");
Date createTime = (Date) rs.getObject("createTime");
//创建课程类
Course course = new Course(id,name,category,desp,createTime);
//存入查询到的课程信息
list.add(course);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
Untils.release(ps, con, rs);
}
return list;
}
}package com.ht.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class AddCourse {
public static boolean addCourse(String name,String category,String desp) {
Connection con = null;
PreparedStatement ps = null;
boolean flag = false;
try {
//获得连接
con = Untils.getConnection();
//编写SQL语句
String sql = "INSERT course(name,category,desp,createTimt) VALUES(?,?,?,NOW())";
//预编译SQL
ps = con.prepareStatement(sql);
//设置具体参数
ps.setString(1, name);
ps.setString(2, category);
ps.setString(3, desp);
//执行SQL
int i = ps.executeUpdate();
if(i>0) {
System.out.println("添加成功!");
}else {
System.out.println("添加失败!");
}
}catch(Exception e) {
e.printStackTrace();
}finally {
Untils.release(ps, con);
}
return flag;
}
}<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>JDBCTest</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>ServiceServlet</servlet-name> <servlet-class>com.ht.test.ServiceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServiceServlet</servlet-name> <url-pattern>/addCourse</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ServiceServlet</servlet-name> <url-pattern>/selectCourse</url-pattern> </servlet-mapping> <error-page> <error-code>404</error-code> <location>/fail.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/fail.jsp</location> </error-page> </web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<style>
div{
width: 300px;
height: 150px;
border: 1px solid red;
}
span{
text-align: center;
display: block;
}
</style>
</head>
<div>
<span>课程添加</span>
课程名称 <input type="text"><br>
所属方向 <input type="text"><br>
课程描述 <input type="text"><br>
<input type="submit" value="添加" style="margin-left:100px;margin-top:20px" onclick="location.href='./index2.jsp'">
</div>
</html><%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table {
border-right: 1px solid red;
border-bottom: 1px solid red;
}
tr,td{
border-left: 1px solid red;
border-top: 1px solid red;
}
span{
font-size: 30px;
}
</style>
</head>
<body>
<div>
<span>添加成功</span>
<table>
<tr>
<td>课程名称</td>
<td>所属方向</td>
<td>课程描述</td>
<td>创建时间</td>
</tr>
<c:forEach var="co" items="${courses}" varStatus="idx">
<tr>
<td>${co.name}</td>
<td>${co.category}</td>
<td>${co.desp}</td>
<td>${co.createTime}</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <body> <span>失败</span> 找不到! </body> </body> </html>



正在回答 回答被采纳积分+1
你好!首先了解一下什么时候会出现405错误。当提交的是get请求,但是却调用了post()方法,就会出现这个错误。反之,如果提交post请求,却调用get()方法也是一样的。而如果是service()方法,那么get和post请求都是可以处理的。
检查发现,ServiceServlet中的HttpServletRequest引用错了,导致service()方法参数错误,也就找不到service()方法了,所以提交请求出现了405错误

作业中还有一些问题,我们分析一下,现在的请求路径是selectCourse

从配置文件看,/selectCourse这个路径对应的是ServiceServlet

而ServiceSelect中对应的addCourse和selectCourse在url地址中都是不存在的,这个应该在url地址中体现出来

再有添加课程的html文件中也没有表单标签<form>和action,所以也不知道提交到哪里了。
下面是修改建议,先帮你理清添加课程的思路,其他可以参考这个完成:
1、添加课程的html文件,去掉选中内容,点击按钮后就进行提交了,不需要跳转到其他页面。添加<form>标签,将<input>标签写在form标签内,并为input标签设置name属性,name的值与ServiceServlet中调用getParameter()方法的参数名一致。设置action属性

改正后的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<style>
div{
width: 300px;
height: 150px;
border: 1px solid red;
}
span{
text-align: center;
display: block;
}
</style>
</head>
<body>
<div>
<form action="addCourse">
<span>课程添加</span>
课程名称 <input type="text" name="name"><br>
所属方向 <input type="text" name="category"><br>
课程描述 <input type="text" name="desp"><br>
<input type="submit" value="添加" style="margin-left:100px;margin-top:20px">
</div>
</form>
</body>
</html>2、Service类的案例代码改正后如下:
package com.ht.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Objects;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
//import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ServiceServlet
*/
public class ServiceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServiceServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletrequestuest requestuest, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(Objects.equals("/addCourse", request.getServletPath())) {
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String category = request.getParameter("category");
String desp = request.getParameter("desp");
System.out.println("ok");
}
}
}用上面的两个文件,再用你之前的web.xml。启动项目后先访问jsp页面,会提交后会在控制台输出ok。这样说明程序没问题,可以继续后面的开发。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星