一、实现Controller接口
public class HelloContronller implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
System.out.println("spring入门!");
ModelAndView m=new ModelAndView();//这个对象用来保存数据和数据 ,方便传输
m.addObject("name", "小美");//设置响应的数据name req.setAttribute()
m.addObject("age", "20");
m.setViewName("/WEB-INF/hello.jsp");////设置响应视图的路径 WEB-INF下的资源不能直接访问,必须通过转发
return m;
}
}
二、实现HttpRequestHandler接口
public class HiController implements HttpRequestHandler{
@Override
public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("实现HttpRequestHandler...");
req.setAttribute("name", "华仔");
req.setAttribute("age", 18);
//转发 -- 因为要访问WEB-INF的资源 共享request作用域的数据
req.getRequestDispatcher("/WEB-INF/hello.jsp").forward(req, resp);
}
}
三、普通类加注解【常用-掌握】
- 引入:
上面这两种太局限了
方法名固定了
参数固定
返回值固定
-
写法:
写一个类
要在这个类上加上一个注解@Controller
该注解使用前提:
<!-- 扫描包路径:上下文组件扫描 ,Spring容器会去扫描cn.itsource这个包及其子包中所有的类,
如果发现类上有类似@Controller这样注解,就会创建该类的对象,并进行管理-->
<context:component-scan base-package="cn.itsource"></context:component-scan>
请求匹配也不用<bean配置>,要用注解@RequestMapping
该注解使用前提:
<mvc:annotation-driven></mvc:annotation-driven>
配置一次,永久使用
全注解:
-
匹配请求参数的注解
以前用
<bean id="/hello" class="类的全限定名">
`
现在用RequestMapping("/hello")
但是需要去spring-mvc.xml开启spring对mvc的支持该注解才生效
<!--开启spring对mvc的支持该注解才生效-->
<mvc:annotation-driven></mvc:annotation-driven>
- 实例化对象注解(它们只能放在类上。前提在spring-mvc.xml中去配置,扫描包路径的配置:<context:component-scan base-package=“cn.itsource”></context:component-scan>)
在控制层器Controller层中使用:@Controller
在Service层中使用:@Service
在Dao层中使用:@Repository
如果不在上面这些情况中需要实例化对象使用通用注解:@Component
这个四个注解,可以互用,但是不建议,最好按照层次使用。 - 注入注解
以前的方式<property name="name" value="牛牛"></property>
现在注解:@Autowired(按照类型匹配),@Resource(默认安照名字匹配,要对应上类的名字,),用在字段和setter方法上,一般来说都是放在字段上面。
注意现在能用注解全用注解,只有在使用别人写的类的时候才去使用xml配置。