springmvc访问不到controller_SSM框架-SpringMVC详解
发布日期:2021-09-13 19:08:26 浏览次数:1 分类:技术文章

本文共 3823 字,大约阅读时间需要 12 分钟。

springmvc概述

Springmvc是spring框架的一个模块,spring和springmvc无需中间整合层整合。

Springmvc是一个基于mvc的web框架

表现层的三大任务:

9304178248968783ab826bca2c3ae0d1.png
  • URL到controller的映射
  • http请求参数绑定
  • http响应的生成和输出

MVC设计模式

MVC设计模式是一种通用的软件编程思想。

在MVC设计模式中认为, 任何软件都可以分为三部分组成:

(1)控制程序流转的控制器(Controller)

(2)封装数据处理数据的模型(Model)

(3)负责展示数据的视图(view)

springmvc的实现原理

bc249bd30b9f7805ba4bc081cc24931f.png

(1) .用户发送请求 至 前端控制器(DispatcherServlet);

提示:DispatcherServlet的作用:接收请求,调用其它组件处理请求,响应结 果,相当于转发器、中央处理器,是整个流程控制的中心

(2) .前端控制器(DispatcherServlet)收到请求后调用处理器映射器 (HandlerMapping)

处理器映射器(HandlerMapping)找到具体的Controller(可以根据xml配置、注解进 行查找),并将Controller返回给DispatcherServlet;

(3) .前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)。处理 器适配器经过适配调用具体的Controller;(Controller--> service --> Dao --> 数据库)

Controller执行完成后返回ModelAndView,

提示:Model(模型数据,即Controller处理的结果,Map) View(逻辑视图名,即 负责展示结果的JSP页面的名字)

处理器适配器(HandlerAdapter)将controller执行的结果(ModelAndView)返回给前 端控制器(DispatcherServlet);

(4) .前端控制器(DispatcherServlet)将执行的结果(ModelAndView)传给视图解析 器(ViewReslover)

视图解析器(ViewReslover)根据View(逻辑视图名)解析后返回具体JSP页面

(5) .前端控制器(DispatcherServlet)根据Model对View进行渲染(即将模型数据 填充至视图中);

前端控制器(DispatcherServlet)将填充了数据的网页响应给用户

springmvc实现

第一步:创建maven项目springmvc

d7565db9052ca4ba1f8f9748ab169565.png

第二步:在pom文件中添加依赖

junit        junit        4.10testorg.springframework        spring-webmvc        4.1.3.RELEASEjavax.servlet        servlet-api        2.5providedjavax.servlet        jsp-api        2.0provided

第三步:web.xml中配置前端控制器

springmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc-config.xmlspringmvc/

第四步:创建并配置springmvc-config.xml

第五步:创建HelloController

restController=controller+responsebody:

restController返回json对象

controller返回string:modelandview

controller+responsebody返回json对象

package com.tedu.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/* @Controller,如果当前类所在的包配置了Spring容器包扫描,具有 * 该注解的类,就会作为bean注册到spring容器中,由spring容器 * 创建实例。 */@Controllerpublic class HelloController {    /* @RequestMapping为当前方法配置访问路径     * 当浏览器访问http://localhost:8080/day20-springmvc/hello          * 如果Controller类上没有配置访问路径,当前项目中所有     *     controller中方法上的访问路径都不同冲突! */    @RequestMapping("/hello")    public String testHello() {        System.out.println( "HelloController.testHello()" );        System.out.println( "hello springmvc..." );        //跳转到 /WEB-INF/pages/home.jsp        return "home";    }}

第六步:创建并实现home.jsp

在WEB-INF/pages/目录下,创建home.jsp页面。

Insert title here

day20-springmvc...home.jsp...

第七步:发送请求,进行测试

打开浏览器,输入url地址: http://localhost :8080/day16-springmv/hello 地址。

重定向和转发

重定向redirect和转发forward的区别

1,重定向浏览器地址栏显示新的地址,转发地址栏不变

2,重定向可以重定向别的网站,转发只能转发到本网站中的方法。

redirect重定向

适用于原先的网页不继续提供服务了。

@Controllerpublic class UserController {    //重定向,原先的登录地址    @RequestMapping("/login")    public String login() {        return "redirect:https://passport.jd.com/new/login.aspx";    }}

http://localhost:8080/login

44ebc18b66442e57d1dd27177f5c211a.png

转发后浏览器的地址栏变为转发后的地址。

在chrome的调试窗口中network中查看status code

235b082d77df083b201953a59410fc80.png

forward转发

转发后浏览器地址栏还是原来的地址。所以转发前请求的参数在转发后仍然可以读取到。

//第一输入用户名和密码    @RequestMapping("/loginByName")    @ResponseBody    public String loginByNamePwd(String username,String password) {                return "login";    }        //再次登录时,还要输入验证码    @RequestMapping("/loginByCode")    public String loginByCode(String username,String password,String code) {        //判断验证码是否正确        return "forward:/loginByName";    }
fec4e0cc1e00ae1bf0f290d7771a8b87.png

restful风格

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上

形成RUSTFul形式,这将是未来的发展趋势。它更加简洁,安全。强化URL GET访问方式。

@RestControllerpublic class OrderCotroller {    @RequestMapping("/order/{startTime}/{endTime}")    public String searchByDate(@PathVariable String startTime,            @PathVariable String endTime) {        return "restful startTime="+startTime+",endtime="+endtime;    }}

浏览器访问的URL

http://localhost :8080/order/2019-10-01/2020-10-10

自动将URL 中模板变量{startTime}和{endTime}绑定到@PathVariable注解的同名参数上,即入参后startTime=“2019-10-01”、endTime=“2020-10-10”。

转载地址:https://blog.csdn.net/weixin_39926014/article/details/111038711 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:苹果a7处理器_苹果A系芯片到底强在哪里?它是凭什么超过高通骁龙和华为的?...
下一篇:heap python_[硕.Love Python] Heap(堆)

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月29日 12时52分38秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

vscode 不能使用中文输入法_vscode中vim插件设置 2021-06-24
matlab dwt2(),MATLAB小波变换指令及其功能介绍(超级有用) 2019-04-21
php sequelize,egg.js整合数据库ORM框架Sequelize 2019-04-21
php同时打开2个数据库,thinkphp3.2同时连接两个数据库的简单方法 2019-04-21
centos 开发php扩展,centos 安装php扩展redis 2019-04-21
php+跑buth,php 中函数获取可变参数的方法, 这个语法有点像 golang 语言中的 2019-04-21
cms 单点登录 php,Yii2 中实现单点登录的方法 2019-04-21
oracle自己运行,创建Oracle自动执行Job 2019-04-21
oracle报错00020,oracle启动 ORA-00020: maximum number of processes (%s) exceeded错误 2019-04-21
chmod 赋权所有_chmod 权限 命令详细用法 2019-04-21
html代码翻译_[译]您知道 HTML 的键盘标签吗? 2019-04-21
html抽奖代码_JavaScript高手之路:封装抽奖效果 2019-04-21
hadoop 3.3 一直停留在running wordcount_蛋价持续下跌,今日跌破3.3元大关!深秋季节价格还能反弹吗?... 2019-04-21
的流程图做完后如何保存_2019超火的半永久眉是哪款?做完后我们如何护理?... 2019-04-21
去除logo 高德地图api_深圳品牌logo升级如何保持原型的同时更具创新? 2019-04-21
二重积分转换成极坐标_二重积分转换极坐标r的范围如何确定? 2019-04-21
python中倒背如流_八字基础知识--倒背如流篇 2019-04-21
以太坊地址和公钥_以太坊地址是什么 2019-04-21
linux查看wifi信号命令_linux – 获取WIFI信号强度 – 寻求最佳方式(IOCTL,iwlist(iw)等)... 2019-04-21
npm 不重启 全局安装后_解决修复npm安装全局模块权限的问题 2019-04-21