发表于: 2017-10-31 22:46:51
4 729
1;偏离主线了,今天老实按照任务二路线,先把mvc做了;
Spring MVC 是一个模型 - 视图 - 控制器(MVC)的Web框架建立在中央前端控制器servlet(DispatcherServlet),它负责发送每个请求到合适的处理程序,使用视图来最终返回响应结果的概念。这是总的流程图:
先写一个小demo感受一下流程:
配置Spring MVC的入口 DispatcherServlet,把所有的请求都提交到该Servlet;
在WEB-INF目录下创建 springmvc-servlet.xml,Spring MVC的 映射配置文件表示访问路径/index会交给id=indexController的bean处理
控制类 IndexController实现接口Controller ,提供方法handleRequest处理请求SpringMVC通过 ModelAndView 对象把模型和视图结合在一起
index.jsp很简单,通过EL表达式显示message的内容
总结一下具体步骤:用户访问/index—根据web.xml中的配置所有的访问都会经过DispatcherServlet—根据配置文件springmvc-servlet.xml,访问路径/index会进入IndexController类—在IndexController中指定跳转到页面index.jsp,并传递message数据—在index.jsp中显示message信息
2;用注解方式实现跳转
改之前的配置文件springmvc-servlet.xml注释之前的映射,改成注解
新建一个hello的controller
测试结果ok
3;注解和配置xml方式对比一波
XML配置方式:容易编辑,配置比较集中,方便修改,在大业务量的系统里面,通过xml配置会方便后人理解整个系统的架构,修改之后直接重启应用即可,但是比较繁琐,配置形态丑陋, 配置文件过多的时候难以管理
注解方式:方便,简洁,配置信息和 Java代码放在一起,有助于增强程序的内聚性。但是分散到各个class文件中,所以不宜维护, 修改之后需要重新打包,发布,重启应用。
有大佬总结:小项目,参与人数不多,不复杂的用注解,开发快速。 复杂项目,多人交互,配置量大,维护复杂度高的,用配置文件。
4;实际应用一下,通过浏览器提交表单数据Spring MVC,学员报名会提交自己的name和qq
实体pojo
add的jsp
Show页面的jsp
Controller控制器
运行测试ok
5;侧面总结一下跳转问题;前面的两个小demo,无论是/index跳转到index.jsp 还是/add跳转到show.jsp,都是服务端跳转。可以通过redirect:/index重定向进行客户端跳转;而且跳转和放在哪一个controller的位置无关,只和被注解的方法有关
6;到这里spring的注解方式基本上已经清晰了;这里实际应用一下通过注解方法,定义好check逻辑查看登陆session的访问次数
通过clear清除缓存
7;我看好多教程涉及到拦截器,过滤器,这两个也是后面任务的??,先不看了,前几天看了mybatis,今天完成了mvc,这里试着整合一下ssm:Spring, SpringMVC, Mybatis ;就以查询数据库的学员为例吧
先单独用普通web项目做一次,目录结构以及结果
1.pojo
package com.jnshu.pojo;
public class Student
{
private int id;
private String name;
public int getId()
return id;
2.mapper接口和xml
/*
* 1.Mapper接口与对应的配置文件 2.Service接口与Service的实现类;两者是不同层面的,
* 第一个是Mapper(DAO)层,第二个是Service层,各自有各自的实现类哦。
* */
public interface StudentMapper
public void add(Student student);
public void delete(int id);
public Student get(int id);
public void update(Student student);
public List<Student> list();
public int count();
/*
* Mybatis采用了动态代理的技术,把StudentMapper这个引用打印出来,
* 可以看到,指向了对象:org.apache.ibatis.binding.MapperProxy@1e91c0e
* 这个类,就实现了StudentMapper接口,这是Mybatis通过动态代理技术做到的。
* */
3.service接口和实现
/*
* ServiceImpl被注解@Service标示为一个Service,同时表示它被Spring管理起来了。
* controller里面的 @Autowired StudentService StudentService;
* 意思是找到实现了StudentService接口的类装配进来,所以Spring就会找到它管理的
* studentServiceImpl类装配(注入)进去。而studentService本身是接口,没法被注入的
* */
//ServiceImpl被注解@Service标示为一个Service,同时表示它被Spring管理起来了。
//@Service通常作用在业务层,作用同@component
@Service
public class StudentServiceImpl implements StudentService
/*
* 这里的注入也是要注入mapper的实现类;而这个实现类:
* Mybatis采用了动态代理的技术,如果把StudentMapper这个引用打印出来,
* 可以看到,指向了对象:org.apache.ibatis.binding.MapperProxy@1e91c0e
* 这个类,就实现了StudentMapper接口,这是Mybatis通过动态代理技术做到的。
* */
@Autowired
StudentMapper studentMapper;
public List<Student> list()
return studentMapper.list();
4.controller
5.web.xml
6. applicationContext.xml
7. springMVC.xml
8. listStudent.jsp
总结一下:首先浏览器上访问路径 /listStudent---tomcat根据web.xml上的配置信息,拦截到了/listStudent,并将其交由DispatcherServlet处理--- DispatcherServlet根据springMVC的配置,将这次请求交由----StudentController类进行处理,需要进行这个类的实例化---在实例化StudentController的时候,注入StudentServiceImpl----在实例化StudentServiceImpl的时候,又注入StudentMapper----根据ApplicationContext.xml中的配置信息,将StudentMapper和Student.xml关联起来了-----这样拿到了实例化好了的StudentController,并调用listStudent方法----在listStudent方法中,访问StudentService,并获取数据,并把数据放在"ss"上,接着服务端跳转到listStudent.jsp去---最后在listStudent.jsp 中显示数据
明日计划的事情:
1;再熟悉一下ssm,操作一遍
2;任务二的jetty和postman学习
3;尽量提交任务吧
遇到的问题及解决方法:
问题不是很大,有两个玄学问题
1;提交之后没数据显示。。
是注入的地方省略了,没有自动获取。。。
改了之后,可以了
诡异的是,我又返回修改之前,用debug调试的时候。。。又好了。。。
2;同样的内容,报错,重启之后好了;
3,idea的bug???标红但是正常运转
收获:
1;学习实践mvc的xml方式
2;学习实践mvc的annotation方式;
3;学习跑通ssm项目操作数据库
评论