栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC

SpringMVC

特点:
高效,基于请求响应的MVC框架,与spring兼容性好,无缝结合…


HelloSpringMVC
1.新建模块,添加web的支持
2.确定导入了springmvc的依赖
3.配置web.xml,注册DispatcherServlet
遇到的error:
访问首页出现404:导入的jar包没有关联项目。
解决:在projectstructure–artifacts–在该项目的web-inf下建立lib目录,导入依赖

  • springmvc执行原理:

用户提交请求,因为我们在web.xml中配置了dispatcherServlet(前端控制器),所有请求都会经过我们注册的映射路径,被前端控制器拦截。
springmvc帮我们做了?
一:根据请求找到对应的controller
处理器映射(HandlerMapping),前端控制器调用处理器映射器,处理器映射器根据url查找处理器(在spring配置文件中配置的bean,即controller),返回给前端控制器。
二:前端控制器调用适配器,适配器按照特定的规则去适配实现了controller接口的类,让controller去具体执行业务代码(调用业务层…封装对象…封装要跳转的视图),执行完后controller将具体的信息(ModelAndView…)返回给适配器,适配器将模型和视图传递给前端控制器。
三:前端控制器中的模型和视图都会经过视图解析器,视图解析器将解析的逻辑视图名返回给前端控制器,前端控制器响应给用户。
1.获取ModelAndView中的数据
2.解析ModelAndView中的视图名
3.拼接视图名(WEB-INF/jsp/xxx.jsp)
4.将数据渲染到视图上

  • 代码实现:

note:
如果在项目中修改了配置文件,则restart server(重启服务器),如果修改了java源代码,则redeploy(重新发布),如果修改了前端代码,则update class and resource(更新)。

1.配置前端控制器:

    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc-servlet.xml
        
        
        1
    
    
        springmvc
        /
    

/ 和 *.properties ***.properties **/*.xml true

  • MyBatis层:

1.编写数据库配置文件

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&userUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.user=root
jdbc.password=123456

2.编写mybatis核心配置文件
使用日志输出打印sql语句

	    
	        
	    
	    
	    
	        
	    

3.编写数据库对应的实体类
尽量与数据库中对应表的字段名一致。如果不一致有如下方法:

  1. 在XML映射文件中使用的resultMap
  2. 让字段的别名与实体类的属性名相同
  3. 使用Map集合封装结果集

详细回顾Mybatis!

	@Data
	@AllArgsConstructor
	@NoArgsConstructor
	public class Books {
	    private int bookID;
	    private String bookName;
	    private int bookCounts;
	    private String detail;
}

4.dao层的XxxMapper接口

	public interface BooksMapper {
	    //    增加书籍
	    int addBook(Books book);
	
	    //    删除书籍
	    int deleteBook(@Param("bookID") int id);
	
	    //    修改书籍
	    int updateBook(Books book);
	
	    //    查找书籍
	    List queryBooks();
	
	    //    查询一本书
	    Books queryBook(@Param("bookID") int id);
	}

编写对应的XxxMapper.xml配置文件

	    
	        insert into books(bookName,bookCounts,detail)
	        values (#{bookName},#{bookCounts},#{detail})
	    
	
	    
	        delete from books
	        where bookID = #{bookID}
	    
	
	    
	        update books
	        set bookName = #{bookName},
	            bookCounts =#{bookCounts},
	            detail = #{detail}
	        where bookID = #{bookID}
	    
	
	    
	        select * from books
	        where bookID = #{bookID}
	    

编写sql语句时一定要注意语法的正确性!

5.service层的接口和实现类

	public interface BooksService {
	    //    增加书籍
	    int addBook(Books book);
	
	    //    删除书籍
	    int deleteBook(int id);
	
	    //    修改书籍
	    int updateBook(Books book);
	
	    //    查找书籍
	    List queryBooks();
	
	    //    查询一本书
	    Books queryBook(int id);
	}
	public class BooksServiceImpl implements BooksService {
		//注意这里的booksMapper,由spring注入
	    private BooksMapper booksMapper;
	
	    public void setBooksMapper(BooksMapper booksMapper) {
	        this.booksMapper = booksMapper;
	    }
	
	    public int addBook(Books book) {
	        return booksMapper.addBook(book);
	    }
	
	    public int deleteBook(int id) {
	        return booksMapper.deleteBook(id);
	    }
	
	    public int updateBook(Books book) {
	        return booksMapper.updateBook(book);
	    }
	
	    public List queryBooks() {
	        return booksMapper.queryBooks();
	    }
	
	    public Books queryBook(int id) {
	        return booksMapper.queryBook(id);
	    }
	}
  • Spring层
    1.spring整合mybatis,数据源使用c3p0连接池
    2.编写spring整合mybatis的配置文件:spring-dao.xml
	    
	
	    
	        
	        
	        
	        
	    
		
	    
	    	
	        
	        
	        
	    
		
	    
	        
	        
	        
	    
	
	
  • spring整合service层
	
    
    
	
    
        
    

遇到的error:
1.Failed to import bean definitions from URL location [classpath:spring-xxx.xml]
这类错误一般是spring配置文件中命名空间的错误。解决方法就是命名空间记得写全。
2.Error Creating bean with name 'xxx ’
导入依赖后记得要在模块中查看lib目录中是否有加入
3.


spring与mybatis整合流程图:


拦截器
过滤器与拦截器的区别:拦截器是AOP思想的具体应用。
拦截器只会拦截访问的控制器方法。访问jsp/html/…则不会进行拦截。

  • 关于web目录:
    在WEB-INF目录下建立jsp文件夹,存放一些核心页面(视图解析器也一般经过这里)。
    在WEB-INF目录下的所有资源和文件都不能直接访问,只能通过控制器转发或servlet。
  • 拦截器只需实现HandlerInterceptor接口即可
    选择实现的三个方法只有第一个有返回值,如果返回true,则放行(或执行下一个拦截器),返回false的话即拦截。
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("before the function~~~");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("after the function~~~");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("clean~~~");
    }

在spring配置文件中配置拦截器:

    
        
            
            
        
    

判断是否要拦截(怎样拦截)的代码写在拦截器中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号