6-3请老师看看有没有改进的地方

6-3请老师看看有没有改进的地方

主界面:

<%@ 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>
 <form action="http://localhost:8080/servlet_advanced_self/Servlet/test">
   <input type="text" name="name" placeholder="请输入要查询的单词">
   <button>查询</button>
 </form>

</body>
</html>

servlet:

package com.imooc.test2;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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

/**
 * Servlet implementation class ServletTest
 */
@WebServlet("/Servlet/test")
public class ServletTest extends HttpServlet {
 private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletTest() {
        super();
        // TODO Auto-generated constructor stub
    }

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      Map map=new HashMap();
      map.put("apple", "苹果");
      map.put("banana", "香蕉");
      map.put("orange","橙子");
      String index=request.getParameter("name");
      boolean flag=map.containsValue(index);
      if(flag)
      {
       request.setAttribute("name",index);
       request.getRequestDispatcher("/success.jsp").forward(request, response);
      }
      else
      {
      request.getRequestDispatcher("/error.jsp").forward(request, response);
      
      }
     
 }

}

成功界面:

<%@ 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>
<%
  String names=(String)request.getAttribute("name");
  out.println("<h1 style='color:blue'>"+names+"<h1>");
%>
</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>
<%
 String nof="没找到这个单词";
 out.println("<h1 style='color:red'>"+nof+"</h1>");
%>

</body>
</html>


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

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

3回答
芝芝兰兰 2019-04-11 11:11:56

同学你好。可以参考楼下的同学的方法修改,已经很详尽了。

关于问题2寻找map中的value值,可以不必使用Map.entrySet利用iterator遍历key和value,这个一般是用在遍历大型数据,并且需要同时判断key和value时,在这里我们使用下面方式就够用了哦~

  for(String key : map.keySet()) {
        if(key.equals(index)){
            result = map.get(key);
        }
    }

如果解答了同学的疑问,望采纳~

祝学习愉快~


三国狂热 2019-04-03 11:02:42

同学,根据题目要求,你的代码存在一些问题。1.由于英文单词是Map集合的key值,所以检查Map集合是否存在输入的单词(你定义为index)应该使用containsKey()方法;2.当Map集合存在输入的单词时,题目要求将查询到的结果(单词对应的中文,是Map集合的value值)存储到request中,然后再转发显示。所以需要遍历Map集合以获取对应的value值,再将value值转发出去。而你的代码直接将输入的单词转发出去了。3.当Map集合不存在输入的单词时,题目要求将结果(“没有找到对应的单词解释!”)存储到session中,然后重定向进行显示。而你的代码将结果写在了jsp页面,并且使用的是请求转发进行显示。以下是修改意见:

//针对问题1
//修改代码
boolean flag=map.containsKey(index);//原代码:boolean flag=map.containsValue(index);
//针对问题2
//添加代码,位置:if(flag)之前
String result = null;
//添加代码,位置:if(flag){ 之后
for(Map.Entry<String,String> s : map.entrySet()){
    if(index.equals(s.getKey())){
        result = s.getValue();
        break; 
    }
}
//修改代码
request.setAttribute("name",result);//原代码:request.setAttribute("name",index);
//针对问题3
//添加代码,位置:else{ 之后
HttpSession session = request.getSession();
session.setAttribute("name", "没有找到对应的单词解释!");
//修改代码
response.sendRedirect("/你项目的工程名/error.jsp");
//原代码:request.getRequestDispatcher("/error.jsp").forward(request, response);
//修改代码,失败界面的body部分
<%
        String value = (String) request.getSession().getAttribute("name");
        out.println(value);
    %>


  • 感谢同学的热心援助,同学分析的很对,很有条理哦,老师都很佩服你呢!这里可以使用更为简单的方法遍历map,请同学看新的回答~再次感谢你~祝学习愉快~
    2019-04-11 11:13:31
chrismorgen 2019-03-27 16:14:16

你好同学,效果完成的不错,加油,祝学习愉快~

  • 老师,我要是理解没错的话,这位同学应该在返回错误方法中并没有使用响应重定向而是继续使用的请求转发操作。但练习中要求的是使用响应重定向的吧?
    2019-03-31 10:55:10
  • 你好同学,练习题中并没有要求必须使用转发或者重定向哦,用哪个都是可以的,只要是程序的逻辑没有问题,效果正确了就是可以的,祝学习愉快~
    2019-04-01 11:27:53
  • 貌似程序的逻辑也有问题
    2019-04-11 09:05:38
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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