程序员的春天-SpringMVC03

程序员的春天-SpringMVC03

配置开发

配置视图解析器

之前设置视图的方式一

返回字符串为详细路径

    @RequestMapping(value = "/b")
    public String ck(){
        return "/WEB-INF/pages/success.jsp";
    }

之前设置视图的方式二

返回ModelAndView用ModelAndView的setViewName设置详细路径

    @RequestMapping(value = "/c")
    public ModelAndView handleRequest(){
        ModelAndView mv = new ModelAndView();
  	mv.setViewName("/WEB-INF/pages/success.jsp");
        return mv;
    }

这两种方式设置的都是详细路径使用很繁琐

springmvc.xml文件配置

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

这样配置后之前的路径就不需要写详细的路径了只需要写一个jsp的文件名称甚至连后缀jsp都不用写,因为视图解析器会帮忙补全

InternalResourceViewResolver类的全限定路径是固定的
prefix的意思是前缀,就是会帮我们在写的视图前面补上value里面的内容
suffix后缀,在后面补上value里面的内容

固有参数

HttpServletRequest

很好理解这个就是javaweb中学习的那个request
用于承载请求的数据

HttpServletResponse

javaweb中的response
用于承载返回的数据

HttpSession

获取的就是javaweb里的那个session

Model,Map,ModelMap

这三个类似于session是用于承载数据的

@RequestHeader

这个注解用于获取请求头中的数据
@RequestHeader String host获取请求头中的host

返回值

ModelAndView

这个返回的是一个ModelAndView对象,对象内可以设置视图,添加传输的数据

void

可以任何值都不返回,但是那样就只能使用response响应请求了

String

这个可以用来返回一个视图
也可以返回一个json字符串

返回json

ajax请求

	var jq=jQuery.noConflict();
        jq(function () {
            jq("#myBtn").click(function () {
                var data = {
                    uname : "jelly",
                    age : "23",
                    p : {
                        name : "小新"
                    }
                };
                jq.ajax({
                    url: "${pageContext.request.contextPath}/springMvc/c",
                    type: "POST",
		    dataType: "json",
                    contentType: "application/json",
                    success: function (data) {
                        alert(data);
                    }
                });
            })
        })

接收响应

    @RequestMapping(value = "/h", produces = "text/html;charset=utf-8")
    @ResponseBody
    public String ck(){
        return "jelly:女孩";
    }

@ResponseBody将返回值放在ResponseBody中包装成json格式字符串响应
必须要在@RequestMapping增加属性produces = "application/json;charset=utf-8"不然中文回乱码

Object

返回值可以是任何数据类型,甚至可以是一个对象,springmvc都会默认转换成json字符串响应
请求

        var jq=jQuery.noConflict();
        jq(function () {
            jq("#myBtn").click(function () {
                jq.ajax({
                    url: "springMvc/h",
                    type: "POST",
                    dataType: "json",
                    contentType: "application/json",
                    success: function (data) {
                        console.log(data);
                    }
                });
            })
        })

最好加上dataType: "json"设置请求到的数据为json

后台

    @RequestMapping(value = "/h", produces = "application/json;charset=utf-8")
    @ResponseBody
    public Object cka(){
        User user = new User();
        user.setUname("jelly");
        user.setAge(17);
        return user;
	}	

请求转发和重定向

请求转发

又称为服务器内部跳转,一次请求,地址不会改变
默认的返回方式就是请求转发,就是说不对return进行特殊设置就是走请求转发

重定向

又称为服务器外部跳转,两次请求,地址会改变
在请求转发的地址前面加上redirect:就会使请求转发变为重定向
注意重定向不会走视图解析器,所以路径需要写全

注意写在model模型中的数据会通过拼接在地址后面来传递

不想这样的话,可以重定向另一个控制器方法,然后用另一个控制器方法来请求转发页面即可
还可以使用session传递数据

额外知识点:
自己在测试时候遇到的,如果重定向的页面在WEB-INF目录内,是不能访问到的,原因是WEB-INF目录的文件是受保护的不能通过路径获取,只能请求转发到。

封面画师:纯白可怜,图片id=78250907,有需自取

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.byfree.top/archives/springmvc03