实现服务接口 |
实现一个服务接口(TemperatureServlet),包括获取用户请求的城市名称,并返回该城市的天气信息。代码如下:
package com.supermap.sample.temperature;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.supermap.services.Interface;
import com.supermap.services.InterfaceContext;
import com.supermap.services.InterfaceContextAware;
@Interface(componentTypes = { Temperature.class }, optional = false, multiple = false)
public class TemperatureServlet extends HttpServlet implements InterfaceContextAware {
private String id = null;
private Temperature temperature = null;
public TemperatureServlet() {
this.id = String.valueOf(System.currentTimeMillis());
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
PrintWriter out;
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
out = response.getWriter();
String title = "输入查询的城市名称";
out.println("<html>");
out.println("<head>");
out.println("<TITLE>" + title + "</TITLE>");
out.println("</head>");
out.println("<body>");
out.println("<p align=\"center\">" + "欢迎进行城市天气查询" + "</p>");
out.println("<hr>");
out.println("<form method=\"POST\" action=>");
out.println("<p align=\"center\">");
out.println("<label>城市名称:");
out.println("<input type=\"text\" name=\"cityname\" id=\"cityname\" size=\"20\">");
out.println("</label>");
out.println("</p>");
out.println("<p align=\"center\">");
out.println("<label>");
out.println("<input type=\"submit\" name=\"submit\" value=\"提交\">");
out.println("</label>");
out.println("<label>");
out.println("<input type=\"reset\" name=\"reset\" value=\"重置\">");
out.println("</label>");
out.println("</p>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String parameter = request.getParameter("cityname");
String cityName = URLDecoder.decode(parameter, "UTF-8");
String imageURI = temperature.getMapImage(cityName);
// 对服务器 IP 和端口处理
String port = String.valueOf(request.getServerPort());
imageURI = imageURI.replace("{port}", port);
imageURI = imageURI.replace("{ip}", request.getServerName());
String info = temperature.getTemperature(cityName);
PrintWriter out;
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
out = response.getWriter();
String title = "天气信息";
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
out.println("<TITLE>" + cityName + title + "</TITLE>");
out.println("</head>");
out.println("<body>");
out.println("<p align=\"center\">" + cityName + "的天气是:" + info + "</p>");
out.println("<p align=\"center\">");
out.println("<img src=" + imageURI + ">");
out.println("</p>");
out.println("</body>");
out.println("</html>");
}
public void setInterfaceContext(InterfaceContext context) {
this.getServletContext().setAttribute(this.id + "InterfaceContext", context);
List<Object> components = context.getComponents(Object.class);
if (components != null) {
for (Object component : components) {
if (component instanceof Temperature) {
this.temperature = (Temperature) component;
break;
}
}
}
}
}