最近开始用spring,很多东西都不会 ,老大让写个远程接口,于是开始自己动手...看了前辈给的例子,Controller倒是一看就明白大概是怎么回事,可是怎么配置还是不会。边google边摸索着写,花了两天时间终于搞定了。本来是很简单的东西,不会的时候就觉得很难,可是用心去学,总会让它变简单的。
长时间不用估计又忘了,还是整理出来吧,方便自己也希望能帮到别人。
1、先写Controller,一个简单的例子如下:
@Controller @RequestMapping("/welcome.do") public class WelcomeController { @RequestMapping public void hello(HttpServletRequest request, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); String value = request.getParameter("value"); if(value != null && value.length() > 0) { response.setHeader("value", value); out.println("<h1>" + value + "</h1>"); } else { out.println("<h1>no param</h1>"); } out.flush(); out.close(); } }
2、配置文件——web.xml:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
3、配置文件——spring-servlet.xml:
<!-- 把标记了@Controller注解的类转换为bean --> <context:component-scan base-package="sample" /> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> <!-- 处理Mutipart文件上次的bean --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8" />
其实上面的controller里直接是对response操作,没有转发给视图,所以上面的spring-servlet.xml中第二个bean没有用到,如果需要将请求转发给视图,则需要用到这个bean。
这样就完成了,简单吧,我还用了那么久才搞定...真是丢人死了。
然后,写个简单的测试程序。我的项目目录是testController,因此本地测试的url是:http://localhost:8080/testController/welcome.do。代码如下:
public class TestController { public static void main(String[] args) { HttpClient httpClient = new HttpClient(); PostMethod postMethod = new PostMethod("http://localhost:8080/testController/welcome.do"); postMethod.setParameter("value", "Welcome!"); try { httpClient.executeMethod(postMethod); System.out.println("Response:"); System.out.println(postMethod.getStatusLine()); for(Header header : postMethod.getResponseHeaders()) { System.out.println(header); } System.out.println(postMethod.getResponseBodyAsString()); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); }finally { postMethod.releaseConnection(); } } }
打印出来的结果与Controller中一致。这些都搞定了,然后去Controller中改写项目的逻辑。
感想:
果然还是再开一个project来学这些东西比较快。之前在项目的代码里直接写,本地重启的时间就够我去喝杯茶了 ...师兄一开始就告诉我重新开个project做,但是当时很不想再重新部署(之前一次耗了很多时间,最后还是师兄帮我弄好的,心里有点怕怕 ),就直接在原来的工程里写了。后来忍无可忍,干脆心一横,开个新的project得了,兔子逼急了也会咬人呢,我就不信连项目部署都搞不定,大不了网上多找找。
新的项目部署时还是遇到一个问题,tomcat版本不兼容Dynamic Web Module,然后在Properties里的Project Facets里改Dynamic Web Module的版本时报错:Connot change version of project facet Dynamic Web Module to XXX,在网上找到的解决办法是:项目根目录下的.settings文件夹里有个org.eclipse.wst.common.project.facet.core.xml文件,打开一看就明白了,这个文件里把版本号写死了:<installed facet="jst.web" version="3.0"/>,把版本号3.0改为需要的版本就可以了。
以上。