springMVC 入门学习笔记
相关依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.14</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
1 回顾使用Servlet
-
创建一个servlet (继承HttpServlet)
public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取前端参数 String name=req.getParameter("name"); if(name.equals("aaaa")){ req.getSession().setAttribute("name","aaaa"); }else { req.getSession().setAttribute("name","otherr"); } //业务层调用 //视图转发或者重定向 req.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
-
创建一个jsp 页面。
-
在web.xml 中配置映射
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.fadaiyu.serlvet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
-
配置tomcat
-
启动测试
2 第一个springMVC
2.1 通过接口实现
-
DispatcherServlet
其实就是个
Servlet(它继承自
HttpServlet基类),同样也需要在web应用的
web.xml中注册DispatcherServle。<servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--引入配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!--设置启动级别--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>example</servlet-name> <!-- / 是匹配所有请求 /* 是匹配所有jsp 页面--> <url-pattern>/</url-pattern> </servlet-mapping>
-
springmvc 配置文件
<!--处理器映射--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!--适配器映射--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!--视图解析器,dispatcherservlet 给他的modelandview 模板引擎 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceView"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/"/> <!--后缀--> <property name="suffix" value=".jsp"/> </bean> <bean id="/hello" class="com.fadaiyu.controller.HelloCon"/>
-
继承一个controller 接口
public class HelloCon implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //模型和视图 ModelAndView view = new ModelAndView(); //封装对象,放在modelandview 中 view.addObject("msg","hellocc"); // /WEB-INF/jsp/hello.jsp view.setViewName("hello"); return view; } }
运行发现404 :在项目结构 ,工件中导入相关依赖
-
DispaterServlet 表示前端控制器,是整个springmvc 的控制中心,用户发出请求,DispaterServlet接收请求并拦截请求。
#拦截该路径下的请求 <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
-
HandlerMapping 为处理器映射,HandlerMapping 根据请求url查找handler
-
HandlerExecution 表示具体的handler 其主要作用是根据url查找控制器,上面例子中url被查找控制器为hello
-
HandlerExecution 将解析后的信息传递给DispaterServlet ,如解析控制器映射等。
-
HandlerAdapter 表示处理器适配器,其按照特定的规则去执行Handler
-
Handler 让具体的Controller执行
-
Controller 将具体的执行信息返回给HandlerAdapter ,如ModelAndView
-
HandlerAdapter 将视图逻辑名或模型传递给DispatcherServlet.
-
DispatcherServlet 调用视图解析器ViewResolver 来解析HandlerAdapter 传递的逻辑视图名。
-
视图解析器将解析的逻辑视图名传给DispatcherServlet
-
DispatcherServlet 根据视图解析器解析的视图结果调用具体的视图
-
最终视图呈现给用户。
2.2 通过注解
springmvc 配置文件
<?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:mcv="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--自动扫描包,让指定包下的注解生效 -->
<context:component-scan base-package="com.fadaiyu.controller"/>
<!--让spring mvc 不处理静态资源-->
<mvc:default-servlet-handler/>
<!--支持mvc 注解驱动
在spring 中一般采用@RequesetMapping注解来完成映射关系
要想@RequesetMapping 注解生效 必须向上下文中注册@DefaultAnnotationHandlerMapping 和一个 AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理
而annotation-driven配置帮助我们自动完成上面两个实例的注入-->
<mcv:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
@Controller
//@RestController 如果是@RestController 就不会被视图解析器解析 返回的就是字符串。
@RequestMapping("/")
public class HelloCon {
@RequestMapping("/hello")
public String hello(Model model){
//封装数据
model.addAttribute("msg","hellooooo");
//返回数据会被视图解析器处理
return "hello";
// return "redirect:/index.jsp"; 重定向
}
}
3 接收参数
@GetMapping("/test1")
public String test1(Model model,@RequestParam("name") String name){ //@RequestParam("name") 表示从前端接收,并与前端配对
//接收参赛
System.out.println(name);
//将返回结果传递给前端
model.addAttribute("msg","name");
//视图跳转
return "test";
}
/**
* 如果传递的是一个user 对象,则会匹配user 中的属性,名字一样,则正确接收,否则接收不到。
*/
@RequestMapping("/test2")
public String test2(User user){
System.out.println(user);
return "test";
}
学习来自《狂神说java》
本文作者:发呆鱼
本文链接:https://www.cnblogs.com/dyiblog/articles/15927788.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步