使用IntelliJ IDEA 15和Maven 开发Spring Data JPA + MVC Web应用

1. 准备工作

1) 参见“使用IntelliJ IDEA 15和Maven创建Java Web项目

2) Maven中央仓库

3) 应用架构

                                    MVC

                             spring Data JPA

                             Spring Common

                           JPA Provider(hibernate)

2. 搭建开发环境

    参见“使用IntelliJ IDEA开发SpringMVC网站(一)开发环境

3. 配置框架

    参见“使用IntelliJ IDEA开发SpringMVC网站(二)框架配置

4. 管理数据库

    参见“使用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中,配置数据库


5. 用户管理

    参见"使用IntelliJ IDEA开发SpringMVC网站(四)用户管理"


6. SpringMVC

6.1 SpringMVC体系结构


6.2 DispatcherServlet

   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
  在CODE上查看代码片 派生到我的代码片
  1. public abstract class HttpServletBean extends HttpServlet implements EnvironmentAware  
  2.   
  3. public abstract class FrameworkServlet extends HttpServletBean  
  4.   
  5. public class DispatcherServlet extends FrameworkServlet  

   - init方法: 在系统启动时运动,且只运行一次

   - service方法:在系统运行中处于侦听模式,侦听并处理所有的Web请求

6.3 SpringMVC注解类

6.3.1  @RequestMapping

       - 在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等

6.3.2 @Component @Controller @Service @Repository

         @Component是通用标注

         @Controller标注Web控制器,处理HTTP请求的类

               @Service标注Service层的服务

         @Repository标注DAO层的数据访问

         以上四类注解是类级别的,可以不带任何参数,也可以带一个参数,代表bean名字,在进行注入的时候可以通过名字进行注入了。

6.3.3 @Resource @Autowired

         使用@Resource 和@Autowired注解实现注入

         @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Controller  
  2. @RequestMapping("user")  
  3. public class LoginController {  
  4.     @Autowired  
  5.     @Qualifier("loginServce")  
  6.     LoginService service;  
  7. }  

        @Resource,默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Controller  
  2. @RequestMapping("user")  
  3. public class LoginController {  
  4.     @Resource  
  5.     LoginService service;  
  6. }  

       建议使用@Resource进行注入

6.3.4 其它注解类

@PathVariable

    @RequestMapping注解中使用占位符的情况下,需要使用@PathVariable注解指定占位符参数


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @RequestMapping(value="/user/{userId}", method = RequestMethod.GET)  
  2. public String getUser(@PathVariabe("userId") String userId)  
  3. {  
  4.      System.out.println("User Id=" + userId);  
  5.      return "hello";  
  6. }  


@RequestParam

    在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"), 另外一种是用注解@RequestParam直接获取

    它有3个属性:value, required, defaultValue

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <form action="/testRequestParam.do" method="post">  
  2.    参数inputStr: <input type="text", name="inputStr>  
  3.    参数inputInt: <input type="text", name="inputInt>  
  4. </form>  
  5.   
  6. @RequestMapping("testRequestParam")  
  7. public String test(@RequestParam String inputStr, HttpServletRequest request) {  
  8.     System.out.println(inputStr);   
  9.     int inputInt = Integer.valueOf(request.getParameter("inputInt"));  
  10.     System.out.println(inputInt);  
  11.     return "index";  
  12. }  

@CookieValue

   - 读取Cookies中的值,并且赋值给变量

   - 它有3个属性:value, required, defaultValue

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @RequestMapping("/doLogin1")  
  2. public String doLogin(@CookieValue("userName") String userName){  
  3.     return "login.jsp";  
  4. }  

@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
  在CODE上查看代码片 派生到我的代码片
  1. @RequestMapping("/login")  
  2. public void displyaHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,   
  3.                               @RequestHeader("Keep-Alive"long keepAlive){  
  4.     System.out.println("encoding=" + encoding + ", keepAlive=" + keepAlive);     
  5.   
  6. }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值