老师,出现405错误怎么解决?

老师,出现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>

http://img1.sycdn.imooc.com//climg/5da13f4409f1800819190434.jpghttp://img1.sycdn.imooc.com//climg/5da13f580991050318970037.jpghttp://img1.sycdn.imooc.com//climg/5da13f6a0983b44503810856.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕珊 2019-10-12 15:13:22

你好!首先了解一下什么时候会出现405错误。当提交的是get请求,但是却调用了post()方法,就会出现这个错误。反之,如果提交post请求,却调用get()方法也是一样的。而如果是service()方法,那么get和post请求都是可以处理的。

检查发现,ServiceServlet中的HttpServletRequest引用错了,导致service()方法参数错误,也就找不到service()方法了,所以提交请求出现了405错误

http://img1.sycdn.imooc.com//climg/5da17bb009a6084406180080.jpg

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

http://img1.sycdn.imooc.com//climg/5da172f909d1321b04140049.jpg

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

http://img1.sycdn.imooc.com//climg/5da173310981956204520168.jpg

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

http://img1.sycdn.imooc.com//climg/5da1739b09f6de1c06090253.jpg

再有添加课程的html文件中也没有表单标签<form>和action,所以也不知道提交到哪里了。

下面是修改建议,先帮你理清添加课程的思路,其他可以参考这个完成:

1、添加课程的html文件,去掉选中内容,点击按钮后就进行提交了,不需要跳转到其他页面。添加<form>标签,将<input>标签写在form标签内,并为input标签设置name属性,name的值与ServiceServlet中调用getParameter()方法的参数名一致。设置action属性

http://img1.sycdn.imooc.com//climg/5da1746a0988bbac06700115.jpg

改正后的代码如下:

<%@ 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。这样说明程序没问题,可以继续后面的开发。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师