Spring第五天springmvc

SSH

SSH—->

S—->SpringMVC/Struts S—->Spring H—->Hibernate

Spring主要使用用来实现

IOC/DI AOP DAO ORM 为Service提供事务的环境

Hibernate—->HIbernate是一个能过通过操作java对象来达到操作数据库这样的一门技术

Hibernate就是一个持久层的解决方案

Spring中还有一个模块

WEB/WEBMVC模块 这两个模块的主要功能就是用来 对web的一个支持

Web-MVC—–>SpringMVC

MVC—>

M—>Model V——->View C—->Controll

Spring的MVC是用来代替控制层的Servlet的 也就是说Servlet是控制层的一个解决方案

疑问:有了Servlet为什么还要有SpringMVC?

1>:Servlet获取参数只能 :getParameter        直接写对象/可以直接写名字

2>:Servlet实现转发 request....              直接返回地址/返回一个字符串就可以了

3>:上传文件  servlet                        可能就一句话就搞定了

4>:以前文件下载是不是需要返回流              返回一个对象就OK了

5>:以前我们开发是不是在Servlet中药区分你要调用什么方法   SpringMVC给个不同的路径就好了

6>:以前需要写很多的Servlet                   只是申明一个核心的Servlet就好了...

7>:以前我们的方法要么访问get  post           只要你没有特殊说明get/post

8>:以前数据要放置到域对象                     你需要数据财声明对象不需要的话 不申明

9>:以前是不是可以写过滤器                     写的拦截器  这个拦截器 还可以动态改变返回数据

10>:SpringMVC还提供了数据校验的功能


11>:无Controll自动转发的问题

SpringMVC是什么?

SpirngMVC是控制层的一个解决方案 是用于替代Servlet/Struts的 从性能来说 SpringMVC应该是效率更高 而且 开发起来相当方便

SpringMVC能干什么?

前面那十一点…..

Spring和SpringMVC的关系是啥? SpringMVC只是Spring的一个模块而已

Spring SpringMVC SpringData SpringBoot SpringCloud

SpringMVC是控制层的一个解决方案,那么问题来了 SpringMVC只能在 WEB工程下运行

SpringMVC的第一个HelloWord程序

1>:首先要使用第三方的框架 首先的导包

Spring-core Spring-web Spring-webmvc Spring-aop

2>:在我们的web.xml配置核心的Servlet



DispatcherServlet

org.springframework.web.servlet.DispatcherServlet




DispatcherServlet

*.action

3>:编写我们SpringMVC的配置文件(在哪里写? 写什么?)

Spring默认的访问路径是在 :就在我们的WEB-INF目录下

文件的名字写什么? 这里的配置文件的名字叫做 web.xml中配置的servlet-name名字-servlet.xml

DispatcherServlet-servlet.xml


写什么内容?  SpringMVC只是Spring的一个模块而已  ,所以SpringMVC的配置文件的约束 和Spring是一样的 所以copy就可以了

4>:编写一个类这个类实现 Controll接口 并实现里面的handleRequest方法

5>:在我们的handlerequest方法中 new ModelAndView这个对象

6>:设置返回的页面

7>:配置我们的访问路径


1>:假设要向域对象放置数据

                HttpServletResponse response) throws Exception {
         ModelAndView modelAndView=new ModelAndView();
         modelAndView.addObject("msg","我是小波波....");
         modelAndView.setViewName("/index.jsp");
                }

2>:做开发的时候一般都是在src目录下建一个文件夹 来专门存放配置文件

注入我们的配置文件的路径



DispatcherServlet

org.springframework.web.servlet.DispatcherServlet




contextConfigLocation
classpath:config/spring-mvc.xml

拓展

1>:就是在我们的Struts中

 1.0的版本  默认的访问后缀是     .do

 2.0的版本  默认的访问后缀是     .action


2>:SpringMVC中 默认的访问后缀是  .action

SpringMVC的运行 http://127.0.0.1:8080/Day1705_SpringMVC_01/user.action

映射器:是用来获取我们最终的映射路径的 /user.action

多重映射的问题

就是我们的一多个地址是可以对应一个Controll的





userControll
userControll
userControll
userControll


适配器: 找适合我们请求路径的控制器 找的是 你需要的是 实现接口的呢?还是继承类的呢 还是既没有实现接口也没有继承类的

视图解析器:是根基你返回的数据可以来动态的添加后缀的问题

视图解析器 可以用来给返回的字符串添加前后缀







我们SpringMVC的运行

当我们的请求到来的时候 首先的将请求交给映射器 映射器 再将请求交给 适配器 适配器将请求最终找到控制器 控制器处理完成之后将请求交给 视图解析器—>将请求进行返回

免控制器实现转发

我们需要打开一个页面这个页面位于我们的WEB-INF下面 这个下面的请求只能是 转发能够打开这个页面 而且我们只是打开页面不需要进行数据处理




注解模式实现SpringMVC

注解模式实现SpringMVC

1>:


2>:

3>: 编写一个类这个类不用继承 也不用实现任何类

4>:在这个类里面编写控制器的方法 (方法名随便写 但是开发的时候要做到 见名之意) 这个方法返回字符串的类型

5>:在这个类上面使用下面的注解@Controller

6>:在方法上使用下面的注解@RequestMapping(“/back.action”)

7>:返回要跳转的页面

  1>:返回一个路径  return "/WEB-INF/index.jsp";

  2>:只是返回特殊的字符串 return "index";  这种前倾也要配置视图解析器

  3>:实际上还可以返回对象

       返回对象的时候默认的打开页面就是我们映射路径  但是假设我们能够配置前后缀的话那么 这个就可以成功的跳转到一个页面

       我们返回的对象会自动的保存到域对象里面  而且保存的对象的名字 就是类的名字的首字母小写

    @RequestMapping("/back1.action")
public Object backData(){
    System.out.println("王小波到此一游....+add");
    return new User("小波波","12346");
}

接受值的问题

  1>:如果我们需要  request和response的话那么我们可以 直接在我们申明的方法上直接申明就ok了

@RequestMapping(“/parame01.action”)
public void parame01(HttpServletRequest request,HttpServletResponse response){}

  2>;如果我们需要将值放置到 域对象的话那么 可以使用  ModelAndView和 Model这两个对象都是可以的



  3>:接受页面传值的方式1:

   1>:public String parame04(String uName,String uPassWord){}

   2>:假设我们几首的数据要封装成对象的话那么要保证 input中的name和实体类中的属性对应就ok了

    public String parame05(User user){}

   3>:假设你想将数据封装成对象并且 表单中还有多余的字段那么 直接写名字就ok了 

        public String parame06(User user,String uName,String uPassWord,String uGender){}


   4>:接受数组类型的参数

   @RequestMapping("/parame07.action")
public String parame07(String[] ids){
    System.out.println(Arrays.toString(ids));
    return "index";
}

   5>:可以接受集合类型的参数

    这个要使用包装类型

    public class UserListObj {
private List<User> users = new ArrayList<User>();
    }

    html代码

    <form action="${pageContext.request.contextPath}/parame08.action" method="post">
        用户名:<input type="text" name="users[0].uName" /> 
        密码:<input type="text" name="users[0].uPassWord" />
        <hr /> 
        用户名:<input type="text" name="users[1].uName" /> 
        密码:<input type="text" name="users[1].uPassWord" />
        <hr />
        用户名:<input type="text" name="users[2].uName" /> 
        密码:<input type="text" name="users[2].uPassWord" />
       <br />
       <input type="submit" value="提交数据" />
</form>

    接受数据的代码

    @RequestMapping("/parame08.action")
public String parame08(UserListObj listObj){
    System.out.println(listObj.getUsers());
    return "index";
}

假设用户和管理者的属性是一致的并且在同一个controll中的同一个方法中进行数据的获取

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/add.action">userControll</prop>
            <prop key="/delete.action">userControll</prop>
            <prop key="/update.action">userControll</prop>
            <prop key="/query.action">userControll</prop>
        </props>
    </property>
</bean> -->

重点注解模式

                 <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
        <!--配置扫描器  -->
        <context:component-scan base-package="com.zy.controll"></context:component-scan>
        <!--设置mvc驱动  -->
        <mvc:annotation-driven></mvc:annotation-driven>
</beans>


    public class UserControll {
        @RequestMapping("/add.action")
        public String add() {
            System.out.println("调用这个式注解方式");
            return "/update.action";
        }
        @RequestMapping("/update.action")
        public String update() {
            System.out.println("这个式注解方式");
            return "/WEB-INF/index.jsp";
        }
        @RequestMapping("/delete.action")
        public String delete() {
            System.out.println("这个式注解方式");
            return "/WEB-INF/index.jsp";
        }
        @RequestMapping("/query.action")
        public String query() {
            System.out.println("这个式注解方式");
            return "/WEB-INF/index.jsp";
        }
        @RequestMapping("/back.action")
        public String back() {
            System.out.println("这个式注解方式");
            return "index";
        }
        @RequestMapping("/back1.action")
        public Object back1() {
            System.out.println("对象");
            return new User("曾洋","1561");
        }

        @RequestMapping("/param01.action")
        public void param01(HttpServletRequest request,HttpServletResponse response) throws IOException {
            System.out.println("获取部署路径"+request.getContextPath());
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write("我是http出来的");
        }
        @RequestMapping("/param02.action")
        public String  param02(Model model) {
            System.out.println("对象");
            model.addAttribute("msg","this is model");
            return "index";
        }
        @RequestMapping("/param03.action")
        public ModelAndView  param03() {
            ModelAndView mView=new ModelAndView();
            mView.setViewName("index");
            mView.addObject("msg","我是modelview的值");
            return mView;
        }
        @RequestMapping("/param04.action")
        public String  param04(String uName,String uPwd) {
            System.out.println(uName+"--------------------------"+uPwd);
            return "index";
        }
        @RequestMapping("/param05.action")
        public String  param05(User user) {
            System.out.println("这是获取:"+user.getuName()+"--------------------------"+user.getuPwd());
            return "index";
        }
        @RequestMapping("/param06.action")
        public String  param06(User user,String gender) {
            System.out.println("这是获取:"+user.getuName()+"--------------------------"+user.getuPwd()+"................"+gender);
            return "index";
        }
        @RequestMapping("/param07.action")
        public String  param07(String[] hobbys) {
            System.out.println(hobbys[1]);
            return "index";
        }
        @RequestMapping("/param08.action")
        public String  param08(UserList uList,String[] hobbys) {
            System.out.println(hobbys[1]);
             System.out.println(uList.getUsers());
            return "index";
        }
        @RequestMapping("/param09.action")
        public String  param09(UserAndAdmin uAndAdmin) {
            System.out.println(uAndAdmin.getUser());
             System.out.println(uAndAdmin.getAdmin());
            return "index";
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值