菜缤的世界 CairBin's Blog - SpringMVC
type: channel
link: https://blog.cairbin.top/index.php/tag/SpringMVC/
items: Spring MVC上手——核心类、常用注解与RESTful
items: Spring MVC上手——JSP语法基础
items: Spring MVC上手——Maven创建Spring MVC项目

Spring MVC上手——核心类、常用注解与RESTful
type: item
date: 2024-04-01T10:33:47+00:00
description: 核心类、常用注解与RESTfulDispatcherServletDispatcherServlet全称org.springframework.web.servlet.DispatcherServlet。DispatcherServlet并不直接处理请求，它只负责根据请求的信息把请求转发给合适的处理器，然后由处理器来执行实际的处理过程并生成响应，它是Spring MVC框架的入口点，它将所有这些步骤组合在一起，使得开发者可以更轻松地构建Web应用程序并处理客户端请求。每个Spring MVC应用程序通常只有一个。我们可以在web.xml里进行配置： springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springCtx.xml 1 springmvc /springmvc/* 上面例子中所有以/springmvc开头的请求都会被名称为springmvc的DispatcherServlet处理。另外，在上述代码中，有两个可选项 和 。 如果元素的值为1，则启动程序的时候会立刻加载Servlet；如果元素不存在，则在第一个请求时加载。 存在并配置了路径，则会根据路径寻找配置文件，否则将导WEB-INF下寻找servletName-servlet.xml命名形式的文件。ViewResolverViewResolver即视图解析器，我们可以在springCtx.xml文件中配置它。回顾之前的springCtx.xml<?xml version="1.0" encoding="UTF-8"?> 再来看看之前的controllerpackage top.cairbin.test7.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class TestController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { // 创建ModelAndView对象 ModelAndView mav = new ModelAndView(); // 向模型对象中添加数据 mav.addObject("message", "Hello Spring"); // 设置逻辑视图名 mav.setViewName("/WEB-INF/views/hello.jsp"); // 返回ModelAndView对象 return mav; } }我们在控制器中每次都要指定jsp格式文件和/WEB-INF/views/路径是一件很头疼的事，所以可以修改视图解析器的配置来帮助我们操作。 <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> @Controller、@RequestParam与映射相关的注解@Controller在程序中我们可以使用@Controller来声明这是一个控制器用于依赖注入，而无需去实现Controller接口。@RequestMapping@RequestMapping注解可以很方便地让我们设置类或者方法对应的URL路径，只需要将它们写在类或者方法上面即可例如[...] @Controller @RequestMapping("/myController") class MyController{ [...] }[...] @Controller @RequestMapping("/myController") class MyController{ [...] @RequestMapping("/myFunc1") public MyType MyFunc1([...]){ [...] } //还可以指定路径和请求类型(例如GET) @RequestMapping(path="/myFunc2", method=RequestMethod.GET) public MyType MyFunc2([.…

Spring MVC上手——JSP语法基础
type: item
date: 2024-04-01T10:32:53+00:00
description: JSP语法入门前提在前一节中我们已经写过JSP的代码了，这一节将单独介绍JSP一些基础语法。当然，你可以跳过这一节，当后面有代码不太理解的时候再回来阅读。中文编码问题如果中文乱码，看看JSP是否是以UTF8的方式编码，使用此编码在JSP文件最上方需要添加下面内容<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>脚本程序脚本程序是包含任意Java语句、变量、方法或表达式。形式如下：<% 脚本程序代码片段 %>我们借助上一节的top.cairbin.test7，稍微对hello.jsp改造下看看效果。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page isELIgnored="false" %> Hello SpringMvc <% out.println("Hello JSP"); %> 按照上述逻辑来讲应该会在页面显示一个h1的标题，内容为Hello JSP我们访问http://localhost:8080/test7/hello来看看，果然如此。哦，对了，在写语句的时候别忘了那该死的分号。你也可以选择以下等价的XML语句（仍是在JSP文件里写，这里对其他部分省略，用[...]表示）[...] <jsp:scriptlet> out.println("Hello JSP"); </jsp:scriptlet> [...]你大致已经知道JSP书写方式了，为了简洁，在接下来的介绍中除非特殊我们将不再给出演示结果，而是仅介绍用法，请自行在项目中进行测试。JSP表达式表达式先被转化成String，然后被插入到该出现的地方。由于表达式的值会被转化成String，所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。形式如下<%= 这里写jsp表达式，注意前面那个等号 %>它也有等价的XML形式<jsp:expression> 表达式 </jsp:expression>示例，注意这里不能用分号结尾 日期 <%= (new java.util.Date()).toLocaleString() %> JSP声明JSP声明可以声明一个或多个变量、方法等供后面代码使用。JSP声明形式<%! 这里写声明 %>等价的XML<jsp:declaration> 声明的代码片段 </jsp:declaration>示例<%! int num = 114514; %>JSP注释<%-- 我就是JSP注释，此处不会被页面展示，也不会被浏览器看到 --%> 你可以在JSP文件中使用JSP注释和HTML注释，但应当注意JSP注释与HTML有些不同，JSP注释不会被发送到浏览器，而HTML注释会被发送至浏览器并且能在浏览器查看源代码功能中看到！！！在HTML注释中不要写敏感信息！！！JSP指令形式如下<%@ 指令 属性="值" %>经常用到的JSP指令标签有：<%@ page ... %>定义页面依赖属性，比如脚本语言、error页、缓存需求、编码等等<%@ include ... %>包含其他文件<%@ taglib ... %>引入标签库的定义，可以自定义标签对于page常用属性有：language声明当前页面脚本的语言，默认为javaextends指定jsp编译成servlet之后所需要继承的类或者所实现的接口import用于导入当前脚本中可能使用到的其他包里面的类info包含jsp的信息，一般作为当前jsp文件的说明用。可以通过getServletInfo()来获取errorPage指定当前jsp文件发生错误时，自动调用改属性值指定的jsp文件。如果不指定当前属性值，当发生错误时，会抛出异常信息给客户。contentType指定生成网页的文件格式和编码字符集isErrorPage用于指定当前jsp文件是否为错误处理jsp文件JSP行为JSP行为使用XML语法结构控制servlet引擎。它需要严格遵守XML标准：<jsp:行为名称 属性="值" />jsp:include用于在当前页面中包含静态或动态资源jsp:useBean寻找和初始化一个JavaBean组件jsp:setProperty设置JavaBean组件的值jsp:getProperty将JavaBean组件的值插入到output中jsp:plugin用于在生成HTML页面中包含Apple和JavaBean对象jsp:element动态创建一个XML元素jsp:forward从一个JSP文件向另一个文件传递一个包含用户请求的requ…

Spring MVC上手——Maven创建Spring MVC项目
type: item
date: 2024-04-01T10:31:55+00:00
description: Spring MVC项目创建什么是Spring MVCSpring MVC是Spring内置的，实现了Web MVC设计模式的框架。它解决了Web开发过程中很多的问题，例如参数接收、表单验证等。另外它采用松散耦合可插拔组件等结构，具有相对较高的灵活性和扩展性。Spring MVC官方文档可参考 docs.spring.io。Spring MVC执行流程按顺序可分为如下流程用户请求被DispatcherServlet进行拦截处理DispatcherServlet收到请求调用HandlerMappingHandlerMapping找到具体的处理器，生成处理器对象及处理器拦截器，再一起返回给DispatcherServletDispatcherServlet调用HandlerAdapterHandlerAdapter经过适配调用具体的处理器Controller执行完成返回ModelAndView对象HandlerAdapter将ModelAndView返回给DispatcherServletDispatcherServlet将ModelAndView传给ViewResloverViewReslover解析ModelAndView后返回View（给DispatcherServletDispatcherServlet根据View进行渲染DispatcherServlet响应View给用户通过上面流程可知，程序员需要配置DispatcherServlet，并开发View和Controller/Handler。项目创建即然如此，我们就来创建一个Spring MVC项目。打开Eclipse，创建一个Maven项目（想必经过前面学习已经很熟了），项目名称top.cairbin.test7。但是需要注意，创建时请勾选下图的Add project(s) to working set在Select an Archetype这一步需要注意，我们不再用之前的maven-archetype-quickstart，而是maven-archetype-webapp，如下图所示创建完成后项目目录结构大概如下我们还需要引入Spring MVC的依赖包以及Servlet，这你很清楚应该在pom.xml里配置 javax.servlet javax.servlet-api provided 3.1.0 org.springframework spring-core 5.3.23 org.springframework spring-web 5.3.23 org.springframework spring-webmvc 5.3.23 最终效果看起来是这样 4.0.0 top.cairbin test7 war 0.0.1-SNAPSHOT test7 Maven Webapp http://maven.apache.org junit junit 3.8.1 test javax.servlet javax.servlet-api provided 3.1.0 org.springframework spring-core 5.3.23 org.springframework spring-web 5.3.23 org.springframework spring-webmvc 5.3.23 test7 相比于以往的项目，你会发现webapp已经为我们创建了一个resources资源文件夹，并且src/main下多了一个webapp目录。webapp它一般存放前端相关的文件。而webapp目录下有一个WEB-INF，里面有一个默认生成的web.xml配置文件。还记得我们刚才提到的Spring MVC执行流程吗，用户请求会被DispatcherServlet拦截，它叫前端控制器，而这个XML文件就是用来对它进行设置的。我们对web.xml进行修改<?xml version="1.0" encoding="UTF-8"?> springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springCtx.xml 1 springmvc / 注意 classpath:springCtx.xml 这一段引入了一个文件，是用来配置Controller映射信息的。我们再来看看，webapp下还有一个index.jsp文件，它正是你的前端代码文件，它的内容如下 Hello World! 你可能对此表示疑惑，这不就是一个HTML文件，现实一个标题，标题内容为Hello World!吗。没错，但是对于传统的HTML来讲页面是静态的，而我们的JSP文件则能动态获取后端…