我们承接上一篇继续解说。
在上一篇,我们在没有使用annotation的情况下,实现在浏览器打印“Hi, this is first spring mvc application”,这里我们使用@Controller和@RequestMapping实现相同的功能,在这个过程中可以对比下前后不同。
上一篇我们通过四个步骤实现
1. 修改web.xml
2. 在WEB-INF目录下增加spring-dispatcher-servlet.xml文件
3. 在src文件夹下新建HelloController.java类
4. 在WEB-INF目录下新建HelloPage.jsp页面
下面我们将一一讲解使用@Controller和RequestMapping实现的过程:
1. web.xml文件保持不变
2. spring-dispatcher-servlet.xml
修改前
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="HandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name="/welcome" class="com.haha.HelloController"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
修改后
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.haha"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
3. HelloController.java
修改前
package com.haha;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class HelloController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
// TODO Auto-generated method stub
ModelAndView modelandview = new ModelAndView("HelloPage");
modelandview.addObject("welcomeMessage","Hi, this is first spring mvc application");
return modelandview;
}
}
修改后
package com.haha;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController{
@RequestMapping("/welcome")
public ModelAndView helloWorld(){
// TODO Auto-generated method stub
ModelAndView modelandview = new ModelAndView("HelloPage");
modelandview.addObject("welcomeMessage","Hi, this is first spring mvc application");
return modelandview;
}
}
4. HelloPage.jsp不变
通过以上修改后,启动tomcat,在浏览器输入http://localhost:8080/FirstSpringMVCPro/welcome
********************@RequestMapping进一步说明**********************
@RequestMapping()括号中的内容是DispatcherServlet查找路径的依据,如果我们在类的上方增加@RequestMapping(/xx),那么该类的所有访问都必须是.../xx/...
例如,上面的例子,我们在HelloController.java @Controller下增加@RequestMapping("/haha"),那原来http://localhost:8080/FirstSpringMVCPro/welcome能访问到的内容,必须是http://localhost:8080/FirstSpringMVCPro/haha/welcome才能访问到。
package com.haha;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/haha")
public class HelloController{@RequestMapping("/welcome")
public ModelAndView helloWorld(){
// TODO Auto-generated method stub
ModelAndView modelandview = new ModelAndView("HelloPage");
modelandview.addObject("welcomeMessage","Hi, this is first spring mvc application");
return modelandview;
}
}