第一次用Spring Controller

       最近开始用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改为需要的版本就可以了。

        以上。

猜你喜欢

转载自arcticfox9902.iteye.com/blog/1097117