【问题标题】:Multiple if else statement with parameter in doGet() servletdoGet() servlet 中带有参数的多个 if else 语句
【发布时间】:2015-01-09 04:49:39
【问题描述】:

尝试在 servlet doGet() 中执行不同的方法时遇到一些问题。所以当我点击按钮时,它会传递 eventID:

viewDtlEventBtn.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            Intent eventDtlIntent = new Intent(context, EventDetail.class);
            eventDtlIntent.putExtra("eventID", eventIDTV.getText());
            startActivity(eventDtlIntent);
        }
    });

然后在我的 EventDetail 类中,我正在执行 AsyncTask 类中的方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.event_detail);
    context = this; 
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        eventID = extras.getString("eventID");
    }       
    eventModel.setEventID(eventID);
    new GetEventDetailAsyncTask(context).execute(eventModel);
}

在我的 AsyncTask 类中,我正在调用控制器中的方法来检索从 servlet 返回的 JSON:

@Override
protected Double doInBackground(Event... params) {
    try {
        eventCtrl.getEventDetailByID(params[0]);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}

在我的控制器类中:

public Event getEventDetailByID(Event event) throws JSONException {
    Event eventModel = new Event();
    String page;
    JSONArray jsonArray;
    String eventID = event.getEventID();

    try {
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(ENeighbourhoodActivity.URL
                + "?getEventDetailByID&eventID=" + eventID +"");
        HttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();
        String responseString = EntityUtils.toString(entity, "UTF-8");
        page = "{\'EventDetail\':" + responseString + "}";
        try {
            JSONObject jsonObject = new JSONObject(page);
            jsonArray = jsonObject.getJSONArray("EventDetail");
            int length = jsonArray.length();
            for (int i = 0; i < length; i++) {
                JSONObject attribute = jsonArray.getJSONObject(i);
                String eventName = attribute.getString("eventName");
                eventModel.setEventName(eventName);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return event;
}

基本上从这里,我正在访问 servlet。在我的 serlvet 类中的 doGet() 中:

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    JSONArray jsonArray = new JSONArray();
    PrintWriter out = response.getWriter();

    if (request.getParameter("getAllEvent") != null) {  
    }

    catch (JSONException je) {
        System.out.println(je.getMessage());
    } catch (Exception exc) {
        System.out.println(exc.getMessage());
    }
    out.println(jsonArray.toString());
    }
}

我已经有一个用于其他方法的 if 语句。我想知道如何将 getEventDetailByID 和 eventID 参数传递给 servlet,以便它知道要运行哪个方法。

提前致谢。

【问题讨论】:

  • 如果附加到请求中,可以通过getParameter方法获取
  • @Alaychem 那么你的意思是我需要设置一个 NameValuePair 来传递 eventID 作为参数。然后在doGet()里面,我得到了参数?
  • 不要使用参数在 servlet 内部决定要做什么。更好地使用路径和映射,让它路由到不同的 servlet:stackoverflow.com/questions/10000008/…
  • @zapl 你介意提供一些适合我情况的例子吗?因为我不太了解您提供的线程:(
  • 为什么选择 NameValuePair? eventID 不是字符串吗?只需添加?eventID=foo&amp;getEventDetailByID=fee 即可获取请求,是的,获取doGet 上的参数。 (或者按照 zapl 的建议使用不同的 servlet)

标签: java android servlets android-asynctask


【解决方案1】:

这是一个如何获取 eventID 值的示例。

        //gets value from getEventDetailByID parameter.
        String detail = request.getParameter("getEventDetailByID");
        if (detail != null && !detail.equals("")) {
            int eventId = Integer.parseInt(request.getParameter("eventID"));
            //get event detail by id with id 
            //e.g resultObject = myMethod(detail, eventId);
        }

更新 1: 一种更好的方法:

        String action = request.getParameter("action");
        if (action.equalsIgnoreCase("GetById")) {
            int eventId = Integer.parseInt(request.getParameter("eventID"));
            //get event detail by id with id 
            //e.g resultObject = getById(eventId);
        } else if (action.equalsIgnoreCase("GetAllEvents")) {
            //Get all events
            //e.g resultObject = GetAllEvents();
        } else {
        }

网址用法:

通过 id 获取事件:

http://localhost:8080/WebService/EventDetailServlet?action=GetById&eventID=46

获取所有活动详情

http://localhost:8080/WebService/EventDetailServlet?action=GetAllEvents

【讨论】:

  • !detail.equalsIgnoreCase("") - 我不知道 "" 可以区分大小写!
  • 已修复,由 netbeans 中的 ctrl + 空格引起 :) 无论如何都不应该有所作为。
  • @Asiriel 所以在我的控制器类中,HTTPGet 仍然与此相同: HttpGet request = new HttpGet(ENeighbourhoodActivity.URL + "?getEventDetailByID&eventID=" + eventID +"");?跨度>
  • 在我给出的示例中,如果您使用 ?getEventDetailByID&eventID= if (detail != null && !detail.equals("")) 将评估为 false。
  • @Asiriel 好的,给我一点时间来测试一下 :)
猜你喜欢
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
相关资源
最近更新 更多