刚做的网站怎么快速搜索到,房地产开发公司名字大全,网站是用什么软件做的吗,境外网站服务器一.SpringMvc常用注解 
常用注解 RequestMapping:RequestMapping注解是一个用来处理请求地址映射的注解#xff0c;可用于映射一个请求或一个方法#xff0c;可以用在类或方法上。 RequestParam:RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上 ModelAttr…  
一.SpringMvc常用注解 
常用注解 RequestMapping:RequestMapping注解是一个用来处理请求地址映射的注解可用于映射一个请求或一个方法可以用在类或方法上。 RequestParam:RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上 ModelAttribute: 绑定请求参数到命令对象放在功能处理方法的入参上时用于将多个请求参数绑定到一个命令对象从而简化绑定流程而且自动暴露为模型数据用于视图页面展示时使用 暴露表单引用对象为模型数据放在处理器的一般方法非功能处理方法上时是为表单准备要展示的表单引用对象如注册时需要选择的所在城市等而且在执行功能处理方法RequestMapping注解的方法之前自动添加到模型对象中用于视图页面展示时使用 暴露RequestMapping方法返回值为模型数据放在功能处理方法的返回值上时是暴露功能处理方法的返回值为模型数据用于视图页面展示时使用。 SessionAttributes:用于将数据存储到会话Session中在多个请求之间共享数据。 RequestBody:用于将方法的返回值直接作为响应体返回给客户端常用于返回JSON数据。 RequestHeader:使用 RequestHeader 注解可以获取指定的请求头信息。 PathVariable:该注解请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定。 CookieValue:CookieValue注解主要是将请求的Cookie数据映射到功能处理方法的参数上。 使用人类思维解释 解释 
当你在使用 Spring MVC 框架来构建一个 Web 应用程序时你会经常使用一些特殊的注解来告诉框架如何处理请求和数据。让我用更容易理解的方式解释这些注解 RequestMapping: 这就像一个路标告诉框架哪个方法应该处理特定的 URL 请求。你可以把它想象成一本地图上的指示牌告诉你如何到达特定的目的地。  RequestParam: 当你需要从客户端请求中获取参数时这个注解就派上用场了。它帮助你将请求中的数据映射到你的方法参数上就像你从用户口中听到点菜的内容一样。  ModelAttribute: 这个注解有三种用法 当放在方法参数上时它可以将多个请求参数绑定到一个命令对象使得参数的绑定变得更加简单。想象一下你收到了一个复杂的订单这个注解可以帮助你将这个订单整理成一个简单的格式。当放在一般方法上时它可以为表单准备要展示的数据比如在注册页面中选择所在城市的选项。这样数据会自动添加到模型对象中以便在视图页面上展示。当放在功能处理方法RequestMapping 注解的方法的返回值上时它将方法的返回值暴露为模型数据以便在视图页面上使用。 SessionAttributes: 这个注解用于将数据存储在会话Session中以便在多个请求之间共享数据。就像你在不同的餐厅订了多道菜然后在同一个餐厅一次一道地享用一样。  RequestBody: 当你想要将方法的返回值直接作为响应体返回给客户端时可以使用这个注解。通常用于返回 JSON 数据就像你点了一份外卖外卖盒里就是你要的食物。  RequestHeader: 用于获取请求头的信息。你可以想象它为你提供了关于客户端请求的额外信息就像你在餐馆里点菜时服务员询问你的特殊要求。  PathVariable: 当你需要从请求的 URL 中提取特定的部分作为方法的参数时可以使用这个注解。就像你在路上遇到一个特殊标志告诉你需要走哪条路线。  CookieValue: 这个注解帮助你将请求的 Cookie 数据映射到方法的参数上。想象一下你点了一份甜点服务员将甜点的名字告诉你这就是 CookieValue 的作用。  这些注解就像是你与 Spring MVC 框架之间的沟通工具它们帮助你更轻松地处理请求和数据就像你在餐馆里处理订单和食物一样。 
二.参数传递 
pom.xml导入SLF4J的依赖 
log4j2.version2.9.1/log4j2.version
log4j2.disruptor.version3.2.0/log4j2.disruptor.version
slf4j.version1.7.13/slf4j.version!--4.log日志相关依赖--!-- log4j2日志相关依赖 --
!-- log配置Log4j2  Slf4j --
!-- slf4j核心包--
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion${slf4j.version}/version
/dependency
dependencygroupIdorg.slf4j/groupIdartifactIdjcl-over-slf4j/artifactIdversion${slf4j.version}/versionscoperuntime/scope
/dependency!--核心log4j2jar包--
dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion${log4j2.version}/version
/dependency
dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion${log4j2.version}/version
/dependency
!--用于与slf4j保持桥接--
dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion${log4j2.version}/version
/dependency
!--web工程需要包含log4j-web非web工程不需要--
dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-web/artifactIdversion${log4j2.version}/versionscoperuntime/scope
/dependency!--需要使用log4j2的AsyncLogger需要包含disruptor--
dependencygroupIdcom.lmax/groupIdartifactIddisruptor/artifactIdversion${log4j2.disruptor.version}/version
/dependency 
1. 基础类型String类型 
package com.liao.web;import com.liao.model.Book;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.util.Map;Slf4j
Controller
RequestMapping(/param)
public class ParamController {RequestMapping(/hello1)public String index(Integer bid ,String bname) {log.info(简单参数bid:{},bname:{} ,bid,bname);return index;}
} 2. 复杂类型 RequestMapping(/hello2)public String hello2(Book book , HttpServletRequest httpServletRequest) {log.info(复杂参数bid:{},bname:{} ,httpServletRequest.getParameter(bid),httpServletRequest.getParameter(bname));log.info(复杂参数book:{} ,book.toString());return index;} 3. RequestParam   RequestMapping(/hello3)public String toHello3(RequestParam Integer bid,RequestParam(required  false,value  price) Integer bookPrice,RequestParam(bookName) String bname){log.info( 使用RequestParam注解传递参数{},{},{}, bid,bname,bookPrice);return index;} 控制台输出 
不会输出任何结果。 
注RequestParam的required属性 该参数是否为必传项。默认是true表示请求中一定要传入对应的参数否则会报404错误如果设置为false时当请求中没有此参数将会默认为null,而对于基本数据类型的变量则必须有值这时会抛出空指针异常。如果允许空值则接口中变量需要使用包装类来声明。   
4. PathVariable   RequestMapping(/hello4/{bid})public String toHello4(PathVariable(bid) Integer bid){log.info( 使用PathVariable注解传递参数{}, bid);return index;} 5.RequestBody 导入RequestBody依赖 jackson.version2.9.3/jackson.versiondependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion${jackson.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion${jackson.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion${jackson.version}/version/dependency 
测试代码 RequestMapping(/hello5)public String toHello5(RequestBody Map map){System.out.println(map);return index;} 请使用postman或者apipost/eolink等工具发送请求数据。因为浏览器无法携带集合参数所以借助第三方软件进行测试。 
6. RequestHeader   
RequestMapping(/hello7)public String toHello7(Book book, RequestBody Map map, RequestHeader(jwt) String jwt){System.out.println(map);System.out.println(book);System.out.println(jwt);return index;} 
参数传递注意事项 
Spring MVC 提供了多种方式来处理参数传递但在某些情况下可能会遇到一些困难。以下是一些可能引起困难的情况和解决方法 复杂对象传递: 当你需要传递复杂的对象作为参数时可能需要确保请求中的参数名称与对象的字段名称匹配。解决方法是使用ModelAttribute注解将请求参数映射到对象或者使用合适的数据绑定工具如Jackson来处理JSON数据。  路径变量和查询参数: 处理路径变量和查询参数时确保你的RequestMapping注解和方法参数与请求的URL匹配。Spring MVC可以根据请求的URL来自动解析这些参数。  参数验证: 参数验证是一个常见的需求但可能会导致困难。你可以使用Spring的Valid注解和javax.validation包中的验证注解来实现参数验证。  多部分文件上传: 如果需要上传文件Spring MVC提供了MultipartFile作为参数类型但处理文件上传可能会有一些复杂性。你需要配置适当的文件上传解析器并确保前端表单以正确的方式提交文件。  复杂的请求映射: 当你的应用程序有多个控制器和请求映射时可能需要小心管理请求的映射关系以确保请求被正确路由到适当的处理方法。  Session 数据: 在不同请求之间共享数据可能会有一些挑战尤其是在集群环境中。使用SessionAttributes注解可以在会话中存储和共享数据。  不同数据类型的参数: 处理不同数据类型的参数时你需要确保数据类型的转换和验证是正确的。Spring MVC会尝试自动进行数据类型转换但你需要确保你的参数和请求中的数据类型一致。  虽然Spring MVC提供了强大的参数传递和绑定功能但在复杂的应用程序中可能需要仔细规划和调试以确保参数传递不会引发问题。使用合适的注解、验证和数据绑定技术可以解决大多数参数传递的困难。同时详细的日志和调试工具也有助于识别和解决问题。 
三.方法返回值 
1.void ResponseUtil 
package com.liao.untils;import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;public class ResponseUtil {public static void write(HttpServletResponse response,Object o)throws Exception{response.setContentType(text/html;charsetutf-8);PrintWriter outresponse.getWriter();out.println(o.toString());out.flush();out.close();}public static void writeJson(HttpServletResponse response,Object o)throws Exception{ObjectMapper om  new ObjectMapper();write(response, om.writeValueAsString(o));}
} 
ReturnController  
package com.liao.web;import com.liao.untils.ResponseUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
Controller
RequestMapping(/rs)
public class ReturnController {RequestMapping(/hello1)public void hello1(HttpServletResponse response){MapString,Object mapnew HashMap();map.put(code,200);map.put(msg,添加成功);try {ResponseUtil.writeJson(response,map);} catch (Exception e) {e.printStackTrace();}}} 
2.Stringmodel 
%--Created by IntelliJ IDEA.User: 86158Date: 2023/9/5Time: 15:49To change this template use File | Settings | File Templates.
--%
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
h1Hello/h1
名称${name}
地址${address}
/body
/html 代码 
package com.liao.web;import com.liao.untils.ResponseUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;Controller
RequestMapping(/rs)
public class ReturnController {RequestMapping(/hello2)public String hello2(Model model,HttpServletRequest request){model.addAttribute(name,张三);request.setAttribute(address,嘿嘿嘿);return index;}} 四ModelAndView package com.liao.web;import com.liao.untils.ResponseUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;Controller
RequestMapping(/rs)
public class ReturnController {RequestMapping(/hello3)public ModelAndView hello3(){ModelAndView mvnew ModelAndView();mv.addObject(sign,打篮球);mv.setViewName(index);return mv;}
} 
四、页面跳转 在Spring MVC中页面跳转可以通过转发forward或重定向redirect来实现。 
RequestMapping(/hello6)public String hello6() throws Exception {System.out.println(hello6);return forward:hello2;}; 转发forward 
使用请求转发将请求发送到另一个URL路径上进行处理客户端的URL地址不会变化。这种方式适用于不同请求之间的跳转和处理可以共享请求的上下文数据。 RequestMapping(/hello7)public String hello7() throws Exception {System.out.println(hello6);return forward:/param//hello1;}; 重定向redirect 
使用重定向将请求发送到另一个URL路径上进行处理客户端的URL地址会改变。这种方式适用于不同请求之间的跳转和处理可以避免表单重复提交等问题。   RequestMapping(/hello9)public String hello9() throws Exception {System.out.println(hello6);return redirect:/param//hello1;};