JavaEE开发框架-SpringMVC-学习日记

JavaEE开发框架-SpringMVC

概述

srpingmvc功能

  1. Controller为中心完成对系统流程的控制管理

  2. 从请求中搜集数据

  3. 对传入的参数进行验证

  4. 将结果返回给视图

  5. 针对不同的视图提供不同的解决方案

  6. 针对jsp视图技术提供标签库

  7. 拦截器

  8. 上传文件

springmvc结构

  1. DispatcherServlet:中央控制器,把请求给转发到具体的控制类

  2. Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置)

  3. handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略

  4. ModelAndView:服务层返回的数据和视图层的封装类(无论是配置文件还是注解都不需要配

  5. ViewResolver & View:视图解析器,解析具体的视图

  6. Interceptors :拦截器,负责拦截我们定义的请求然后做处理工作(无论是配置文件方式还是注解都需要先创建再配置)

springmvc模式

springmvc流程图

应用

导包

下载地址

配置中央控制器

在web工程的web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

创建配置文件

在WEB-INF下创建xml文件

命名规则:

中央控制器(servlet的名称)的名称+"-servlet.xml”

springmvc-servlet.xml

  1. 在配置文件中添加spring的头信息
  2. 在配置文件中配置controller和视图解析器
<?xml version="1.0" encoding="UTF-8"?>
<!--头信息-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
 ">
    <!--配置controller-->
    <bean id="myController" name="/hello.do" class="com.controller.TestController" ></bean>

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀:所有jsp的公共路径-->
        <property name="prefix" value="/WEB-INF/"></property>
        <!--后缀:所有jsp的文件格式:.jsp-->
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>


创建Controller类并继承AbstractController

package com.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestController extends AbstractController {
    
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        return new ModelAndView("index");
    }
}

启动Tomcat查看效果

参数控制器

参数控制器可以使我们无需创建Controller类实现跳转

ParameterizableViewController(参数控制器)

在配置文件中配置参数控制器

    <bean name="/toIndex.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
       <!--配置索要跳转到视图的名称-->
        <property name="viewName" value="index"></property>
    </bean>

效果

SpringMVC基于注解开发

在springmvc的配置文件中指定注解驱动,配置扫描器

<!--开启注解驱动-->
 <mvc:annotation-driven></mvc:annotation-driven>
<!--开启扫描器-->
 <context:component-scan base-package="com.controller"></context:component-scan>

在com.controller下创建控制类

@controller:标识当前类是控制层的一个具体的实现,标注在类上

@requestMapping:

  • 放在方法上面用来指定某个方法的路径
  • 放在类上的时候相当于命名空间,需要组合方法上的requestmapping来访问
package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/hello.do")
    public String hello(){
        return "index" ;
    }
}

效果

参数接收

在方法中可以自己随意去定义方法的参数,如果方法的参数的名称与传入参数的name匹配就会自动接收,并且转换我们所定义的数据类型,如果参数列表里定义了自定义的类,springmvc会给我们把匹配的参数收集起来并且组装成对象

    @RequestMapping("/hello.do")
    public String hello(String name ){
        System.out.println(name);
        return "index" ;
    }

结果为后台打印出sanjin

返回数据给视图

后台代码:

利用Model类

    @RequestMapping("/hello.do")
    public String hello(Model model){
        Person person = new Person() ;
        person.setName("三金");
        person.setAddr("深圳");
        model.addAttribute("person",person) ;
        return "index" ;
    }

前台代码:

效果:

Ajax调用SpringMVC的方法

ajax.jsp

<script type="text/javascript">

    $(function(){

        $("#myButton").click(function(){
            var mytext = $("#mytext").val();
            $.ajax({
                url:"test/ajax.do",
                type:"post",
                dataType:"text",
                data:{
                    name:mytext
                },
                success:function(responseText){
                    alert(responseText);
                },
                error:function(){
                    alert("system error");
                }
            });
        });


    })
</script>
<body>
<input type="text" id="mytext">
<input type="button" id="myButton" value="click">
</body>
@RequestMapping("/toAjax.do")
public String ajax(){
    return "ajax" ;
}

/*无中文参数下的ajax返回数据*/
@RequestMapping("/ajax.do")
public void ajax(String name , PrintWriter out){
    String resulet = "hello"+name ;
    out.write(resulet);
}
  
    /*有中文参数下的ajax返回数据*/
/*    @RequestMapping("/ajax.do")
    public void ajax(String name , HttpServletResponse response){
        String resulet = "hello"+name ;
        try {
            response.getWriter().write(resulet);
        } catch (IOException e) {
            e.printStackTrace();
        }*/

重定向

	/**
	 * 同一个Controller内部的重定向 return "redirect:"+要重定向到的方法的@RequestMapping值
     */
	@RequestMapping("/redirect.do")
	public String redirect(){
		return "redirect:toAjax.do";
	}
/**
 * Controller之间的重定向
 * return "redirect:"加上/目标Controller的命名空间+@RequestMapping值
 */
@RequestMapping("/redirect1.do")
public String redirect1(){
	return "redirect:/test3/toAjax.do";
}

发布了153 篇原创文章 · 获赞 93 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/JunSIrhl/article/details/104046547