【问题标题】:"Head First Servlet and JSP" example doesn't work“Head First Servlet 和 JSP”示例不起作用
【发布时间】:2014-10-04 03:49:30
【问题描述】:

大家好,我正在阅读一本 jsp 书籍“Head First Servlet 和 JSP”,而下一个示例不起作用...

html代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="windows-1255">
<title>Insert title here</title>
</head>
<body>

<h1 style="text-align: center;">Beer Selection Page</h1>
<br><br>

<form method = "POST" action="SelectBeer.do">
  Select beer characteristics<p>
  Color:
<select name ="color" size="1">
  <option value="light">light</option>
  <option value="amber">amber</option>
  <option value="brown">brown</option>
  <option value="dark">dark</option>
</select>
<br><br>

<div style="text-align:center">
<input type = "SUBMIT">
</div>
</form>

</body>
</html>

Web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 <servlet>     
  <servlet-name>Ch3 Beer</servlet-name> 
  <servlet-class>com.example.web.BeerSelect</servlet-class> 
 </servlet>   

 <servlet-mapping>    
    <servlet-name>Ch3 Beer</servlet-name>      
    <url-pattern>/SelectBeer.do</url-pattern>  
 </servlet-mapping> 
 </web-app>

Servlet 代码:

package com.example.web;

import javax.servlet.*; 
import javax.servlet.http.*;
import java.io.*; 


public class BeerSelect extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws     ServletException, IOException
{
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("Beer Selection Advice<br>"); 
    String c = request.getParameter("color");  
    out.println("<br>Got beer color " + c);
}

}

当我运行它时,我得到...“HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET”...我急需帮助。 提前感谢您的帮助!!

【问题讨论】:

  • 您在浏览器中尝试的是什么网址? html代码的文件名是什么?
  • GET请求需要提供doGet方法
  • 但我没有任何获取请求。
  • 您的示例在 WebSphere Liberty 中运行良好。为此,您不需要任何 doGet() 方法,您只在此处使用 post。谁说的都不对。你的容器可能有问题。您使用什么 url 来显示 html 页面以及您使用什么容器?
  • 我使用 tomcat 作为容器,我的 url 是 localhost:8080/Beer/form.html(表单是 html 文件)我正在使用 elipce,我复制了 .class 文件并将其移动到 WEB- INF/classes/com/example/web/.没有任何效果!!

标签: java jsp servlets


【解决方案1】:

您可以通过向 servlet 添加“doGet”方法来解决此问题。使用与 doPost 相同的方法签名:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws     ServletException, IOException

您编写的代码仅包含一个 doPost 方法。因此,servlet 将只响应 HTTP POST 请求。 HTTP 405 响应代码是 servlet 引擎告诉客户端不支持 HTTP GET 的方式。

【讨论】:

  • 我不明白为什么我需要一个 doGet 方法,我应该总是把它放在一个 servlet 中吗?当我向 servlet 添加“doGet”方法时,我没有收到错误消息,但是当我按下提交按钮时什么也没有发生。 (我也试过在doGet方法里面写doPost,没用)
  • 您并不总是需要 doGet 方法。当对 servlet 的 URL 调用 HTTP GET 请求时,将调用“doGet”。 GET 请求是您加载 URL 时浏览器发出的请求。当您的 servlet 的 URL 上调用 HTTP POST 请求时,将调用“doPost”。提交网页表单是发出 POST 请求的一个示例。
  • 我建议您熟悉一些基本的 HTTP 概念。网上有很多很好的信息。了解 HTTP 动词(GET、POST 等)将有助于清楚这一点。
  • 我不明白的是浏览器是否必须创建一个HTTP GET请求才能从服务器获取页面,如果是这样,是不是意味着servlet必须有一个doGET方法。无论如何,当我添加 doGet 方法时,我仍然没有从服务器那里得到任何应该写入客户端选择的颜色的响应
【解决方案2】:

你已经编写了所有东西,但是在 servlet 代码中你需要进行更改:

Servlet 代码:

package com.example.web;

import java.io.IOException;
import java.io.PrintWriter; 

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BeerSelect extends HttpServlet {
private static final long serialVersionUID = 1L;

public BeerSelect() {
    super();
 }

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("Beer Selection Advice<br>"); 
    String c = request.getParameter("color");  
    out.println("<br>Got beer color " + c);
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多