前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用IntelliJ IDEA 15和Maven 开发Spring Data JPA + MVC Web应用

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

作者头像
bear_fish
发布2018-09-19 16:27:30
1.4K0
发布2018-09-19 16:27:30
举报
文章被收录于专栏:用户2442861的专栏

http://blog.csdn.net/myarrow/article/details/50827370

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

  1. public abstract class HttpServletBean extends HttpServlet implements EnvironmentAware  
  2. public abstract class FrameworkServlet extends HttpServletBean  
  3. 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

  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

  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

  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

  1. <form action="/testRequestParam.do" method="post">  
  2.    参数inputStr: <input type="text", name="inputStr>  
  3.    参数inputInt: <input type="text", name="inputInt>  
  4. </form>  
  5. @RequestMapping("testRequestParam")  
  6. public String test(@RequestParam String inputStr, HttpServletRequest request) {  
  7.     System.out.println(inputStr);   
  8. int inputInt = Integer.valueOf(request.getParameter("inputInt"));  
  9.     System.out.println(inputInt);  
  10. return "index";  
  11. }  

@CookieValue

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

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

[java] view plain copy

  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

  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. }  
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年07月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 准备工作
  • 2. 搭建开发环境
  • 3. 配置框架
  • 4. 管理数据库
  • 5. 用户管理
  • 6. SpringMVC
    • 6.1 SpringMVC体系结构
      • 6.2 DispatcherServlet
        • 6.3 SpringMVC注解类
          • 6.3.1  @RequestMapping
          • 6.3.2 @Component @Controller @Service @Repository
          • 6.3.3 @Resource @Autowired
          • 6.3.4 其它注解类
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档