http://blog.csdn.net/myarrow/article/details/50827370
1) 参见“使用IntelliJ IDEA 15和Maven创建Java Web项目”
2) Maven中央仓库
3) 应用架构:
MVC
Spring Data JPA
Spring Common
JPA Provider(Hibernate)
参见“使用IntelliJ IDEA开发SpringMVC网站(一)开发环境”
参见“使用IntelliJ IDEA开发SpringMVC网站(二)框架配置”
参见“使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置”
在一般的框架中,数据库中的一张表对应一个Java Bean,而在SpringMVC架构中,Java Bean对应一个Model。
Table <-> Java Bean <-> Model
在JavaEE Persistence中定义了JPA Provider (Hibernate)
1) 创建MySQL数据库
2)IntelliJ IDEA导入数据库,以自动生成Table对应的Entity
- Add Framework Support->JavaEE Persistence->Hibernate 生成persistence.xml - Generate Persistence Mapping ->By Database Schem->Choose Data Source 在Model目录下生成表的实体 3)配置数据库
- 在xxx-servlet.xml中,配置数据库
参见"使用IntelliJ IDEA开发SpringMVC网站(四)用户管理"
DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下: 1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析; 2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器); 3、 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器); 4、通过ViewResolver解析逻辑视图名到具体视图实现; 5、本地化解析; 6、渲染具体的视图等; 7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
其继承关系如下所示:
DispatcherServlet->FrameworkServlet->HttpServletBean->HttpServlet
[html] view plain copy
- init方法: 在系统启动时运动,且只运行一次
- service方法:在系统运行中处于侦听模式,侦听并处理所有的Web请求
- 在Controller控制器类的类定义和方法定义处都可以标@RequestMapping注解
- DispatcherServlet截获请求后,就可以通过控制器上的@RequestMapping提供的映射信息确定请求所对应的处理方法。
- RequestMapping注解类的属性有:
1)value: 代表具体的请求路径(URL)
如:@RequestMapping(value="/login"),可以处理所有请求
2)method:指定请求的method类型,GET, POST, PUT, DELETE等
如:@RequestMapping(value="/login" method=RequestMethod.POST)
或@RequestMapping(value="/login" method={RequestMethod.POST, RequestMethod.GET)
3)consumes:指定请求的提交内容类型(Content-Type),如application/json, text/html
如:@RequestMapping(value="/login", consumes="application/json")
或@RequestMapping(value="/login", consumes={"application/json", "text/plain"})
4)produces:指定返回的内容类型(Content-Type)
如:@RequestMapping(value="/login", produces="application/json")
或@RequestMapping(value="/login", produces={"application/json", "text/plain"})
5)params:指定请求中必须包含某些参数值,才会触发这个处理方法
如:@RequestMapping(value="/login", params="myPara=myValue")
或@RequestMapping(value="/login", params={"myParam=myValue", "myParam1!=myValue")
6)headers:请求Header中必须包含某些指定的参数值,才能让此方法处理此请求
如:@RequestMapping(value="/login", headers="content-type=text/*")
或@RequestMapping(value="/login", headers={"content-type=text/*, "Referer=http://www.1.com/"})
- Ant风格和带[XXX]占位符的URL:
1) /user/*/login: 匹配 /user/任意字符串/login等
2) /user/**/login:匹配/user/login, /user/aa/bb/login等
3) /user/login??:匹配/user/loginAA, /user/loginbb等
4) /user/{userId}:匹配/user/123, /user/567等
5) /user/**/{userId}:匹配/user/aaa/bbb/123, /user/aaa/235等
@Component是通用标注
@Controller标注Web控制器,处理HTTP请求的类
@Service标注Service层的服务
@Repository标注DAO层的数据访问
以上四类注解是类级别的,可以不带任何参数,也可以带一个参数,代表bean名字,在进行注入的时候可以通过名字进行注入了。
使用@Resource 和@Autowired注解实现注入
@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用
[java] view plain copy
@Resource,默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
[java] view plain copy
建议使用@Resource进行注入
@PathVariable
@RequestMapping注解中使用占位符的情况下,需要使用@PathVariable注解指定占位符参数
[java] view plain copy
@RequestParam
在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"), 另外一种是用注解@RequestParam直接获取
它有3个属性:value, required, defaultValue
[java] view plain copy
@CookieValue
- 读取Cookies中的值,并且赋值给变量
- 它有3个属性:value, required, defaultValue
[java] view plain copy
@SessionAttributes
- 如果希望在多个请求之间公用某个模型属性数据,则可以在控制器类标注一个@SessionAttributes,Spring MVC会将模型中对应的属性暂存到HttpSerssion中 - 除了SessionAttributes,还可以直接用原生态的request.getSession()来处理session数据
@ResponseBody
- 用于将Controller的方法返回的对象,通过适当的HttpMessageConverter(转换器)转换为指定格式后,写入到Response对象的body数据区 - 返回如json、xml等时使用
- 使用ResponseBody将跳过视图处理部分 - 在springmvc配置文件中通过<mvc:annotation-driven />,给AnnotationMethodHandlerAdapter初始化7个转换器
- 常用的转换器:
@RequestHeader
- 可以把Request请求header部分的值绑定到方法的参数上
[java] view plain copy