返回顶部
首页 > 资讯 > 精选 >springmvc path请求怎么映射到bean方法
  • 212
分享到

springmvc path请求怎么映射到bean方法

2023-06-20 16:06:50 212人浏览 薄情痞子
摘要

本篇内容介绍了“springMVC path请求怎么映射到bean方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、加载注册流程&nbs

本篇内容介绍了“springMVC path请求怎么映射到bean方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、加载注册流程

      1.在dispatch-servlet.xml中配置< mvc:annotation-driven/>,在控制器的方法上加入@RequestMapping注解即可。

      2.mvc:annotation-driven的解析流程 会调用到自定义元素解析器的AnnotationDrivenBeanDefinitionParser.parse方法。

      3.org.springframework.WEB.servlet.mvc.method.annotation.RequestMappingHandlerMapping为RequestMapping注解映射到后台接口的注册表。此类实现了InitializingBean接口,会触发到

afterPropertiesSet方法。

org.springframework.web.servlet.handler.AbstractHandlerMethodMapping @Overridepublic void afterPropertiesSet() {initHandlerMethods();} protected void initHandlerMethods() {for (String beanName : getCandidateBeanNames()) {if (!beanName.startsWith(SCOPED_TARGET_NAME_PREFIX)) {processCandidateBean(beanName);}}handlerMethodsInitialized(getHandlerMethods());}

在initHandlerMethods方法中会先调用getCandidateBeanNames获取当前容器工厂的所有BEAN,然后逐个BEAN进行处理。

1 获取所有BEAN流程

protected String[] getCandidateBeanNames() {return (this.detectHandlerMethodsInAncestorContexts ?BeanFactoryUtils.beanNamesForTypeIncludingAncestors(obtainApplicationContext(), Object.class) :obtainApplicationContext().getBeanNamesForType(Object.class));}

2 处理BEAN流程

protected void processCandidateBean(String beanName) {Class<?> beanType = null;try {beanType = obtainApplicationContext().getType(beanName);}catch (Throwable ex) {// An unresolvable bean type, probably from a lazy bean - let's ignore it.if (logger.isTraceEnabled()) {logger.trace("Could not resolve type for bean '" + beanName + "'", ex);}}if (beanType != null && isHandler(beanType)) {detectHandlerMethods(beanName);}}

3 判断当前BEAN是否HANDLER

protected boolean isHandler(Class<?> beanType) {return (AnnotatedElementUtils.hasAnnotation(beanType, Controller.class) ||AnnotatedElementUtils.hasAnnotation(beanType, RequestMapping.class));}

4 如果此类是控制器或者有requestMapping注解,才会处理。

springmvc path请求怎么映射到bean方法

 4.5 遍历当前类的所有方法,查找包含RequestMapping注解的方法,然后保存到

AbstractHandlerMethodMapping.MappingReGIStry注册表中。

protected void detectHandlerMethods(Object handler) {Class<?> handlerType = (handler instanceof String ?obtainApplicationContext().getType((String) handler) : handler.getClass()); if (handlerType != null) {Class<?> userType = ClassUtils.getUserClass(handlerType);Map<Method, T> methods = MethodIntrospector.selectMethods(userType,(MethodIntrospector.MetadataLookup<T>) method -> {try {return getMappingFORMethod(method, userType);}catch (Throwable ex) {throw new IllegalStateException("Invalid mapping on handler class [" +userType.getName() + "]: " + method, ex);}});if (logger.isTraceEnabled()) {logger.trace(formatMappings(userType, methods));}methods.forEach((method, mapping) -> {Method invocableMethod = aopUtils.selectInvocableMethod(method, userType);registerHandlerMethod(handler, invocableMethod, mapping);});}}

判断当前方法是否包含requestMapping注解

private RequestMappingInfo createRequestMappingInfo(AnnotatedElement element) {RequestMapping requestMapping = AnnotatedElementUtils.findMergedAnnotation(element, RequestMapping.class);RequestCondition<?> condition = (element instanceof Class ?getCustomTypeCondition((Class<?>) element) : getCustomMethodCondition((Method) element));return (requestMapping != null ? createRequestMappingInfo(requestMapping, condition) : null);}

最终会调用org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod保存到URL和RequestMappinfo的映射注册表中。

AbstractHandlerMethodMappingprotected void registerHandlerMethod(Object handler, Method method, T mapping) {this.mappingRegistry.register(mapping, handler, method);}

具体的保存逻辑

在这个方法中主要操作的数据对象有四个,分别是mappingLookup、urlLookup、corsLookup和registry。下面对这四个对象进行说明:

  1. mappingLookup对象是Map结构,key表示mapping对象,value表示处理对象,在本例中key是RequestMappingInfo对象,value是Controller中的某一个方法。

  2. urlLookup对象是Map结构,key表示url,value表示mapping对象,本例中key是具体的url值"/demo/postMapping/",value是RequestMappingInfo对象,

  3. corsLookup对象是Map结构,key表示处理方法(Controller中的某个方法),value表示跨域配置,本例中没有进行跨域注解的使用因此数据不存在,如果需要看到跨域数据,可以在method上添加@CrossOrigin注解

  4. registry对象是Map结构,key表示mapping对象,value表示MappingRegistration对象

AbstractHandlerMethodMapping.MappingRegistry  内部类public void register(T mapping, Object handler, Method method) { this.readWriteLock.writeLock().lock();try {HandlerMethod handlerMethod = createHandlerMethod(handler, method);validateMethodMapping(handlerMethod, mapping);this.mappingLookup.put(mapping, handlerMethod); List<String> directUrls = getDirectUrls(mapping);for (String url : directUrls) {this.urlLookup.add(url, mapping);} String name = null;if (getNamingStrategy() != null) {name = getNamingStrategy().getName(handlerMethod, mapping);addMappingName(name, handlerMethod);}  this.registry.put(mapping, new MappingRegistration<>(mapping, handlerMethod, directUrls, name));}finally {this.readWriteLock.writeLock().unlock();}}

生成的数据如下:

springmvc path请求怎么映射到bean方法

系统拦截器列表初始化过程,会调用到AbstractHandlerMapping.initApplicationContext,这个会查找当前容器工厂中所有继承了MappedInterceptor类的拦截器实例BEAN.然后保存到AbstractHandlerMapping.interceptors

protected void initApplicationContext() throws BeansException {extendInterceptors(this.interceptors);detectMappedInterceptors(this.adaptedInterceptors);initInterceptors();}

springmvc path请求怎么映射到bean方法

二、调用Http请求根据PATH寻找接口方法流程

  1.首先Tomcat会调用DispatcherServlet.doDispatch方法,进行请求分发处理。

protected void doDispatch(httpservletRequest request, HttpServletResponse response) throws Exception {HttpServletRequest processedRequest = request;HandlerExecutionChain mappedHandler = null;boolean multipartRequestParsed = false; WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); try {ModelAndView mv = null;Exception dispatchException = null; try {processedRequest = checkMultipart(request);multipartRequestParsed = (processedRequest != request); // Determine handler for the current request.mappedHandler = getHandler(processedRequest);if (mappedHandler == null) {noHandlerFound(processedRequest, response);return;} // Determine handler adapter for the current request.HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); if (!mappedHandler.applyPreHandle(processedRequest, response)) {return;} // Actually invoke the handler.mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); if (asyncManager.isConcurrentHandlingStarted()) {return;} applyDefaultViewName(processedRequest, mv);mappedHandler.applyPostHandle(processedRequest, response, mv);}catch (Exception ex) {dispatchException = ex;}processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);}finally {if (asyncManager.isConcurrentHandlingStarted()) {// Instead of postHandle and afterCompletionif (mappedHandler != null) {mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);}}else {// Clean up any resources used by a multipart request.if (multipartRequestParsed) {cleanupMultipart(processedRequest);}}}}

首先调用getHandler去根据请求PATH查找HandlerExecutionChain,HandlerExecutionChain就是一个RequestHandleMappinfo加上一个拦截器列表。会调用到AbstractHandlerMapping.getHandler

public final HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {Object handler = getHandlerInternal(request);if (handler == null) {handler = getDefaultHandler();}if (handler == null) {return null;}// Bean name or resolved handler?if (handler instanceof String) {String handlerName = (String) handler;handler = obtainApplicationContext().getBean(handlerName);} HandlerExecutionChain executionChain = getHandlerExecutionChain(handler, request); return executionChain;}

最终会调用到AbstractHandlerMapping.lookupHandlerMethod根据PATH查找HandlerMethod,这里面的 this.mappingRegistry.getMappingsByUrl就是初始化时的URL和RequestMappingInfo映射表。

protected HandlerMethod lookupHandlerMethod(String lookupPath, HttpServletRequest request) throws Exception {List<Match> matches = new ArrayList<>();List<T> directPathMatches = this.mappingRegistry.getMappingsByUrl(lookupPath);if (directPathMatches != null) {addMatchingMappings(directPathMatches, matches, request);}if (matches.isEmpty()) {// No choice but to Go through all mappings...addMatchingMappings(this.mappingRegistry.getMappings().keySet(), matches, request);} if (!matches.isEmpty()) {Match bestMatch = matches.get(0);request.setAttribute(BEST_MATCHING_HANDLER_ATTRIBUTE, bestMatch.handlerMethod);handleMatch(bestMatch.mapping, lookupPath, request);return bestMatch.handlerMethod;}else {return handleNoMatch(this.mappingRegistry.getMappings().keySet(), lookupPath, request);}}

调用堆栈1

springmvc path请求怎么映射到bean方法

调用堆栈2

springmvc path请求怎么映射到bean方法 4.

初始化HandlerExecutionChain拦截器列表,这个会查找当前容器工厂中所有实现了handleInteropr 的类,

AbstractHandlerMapping类protected HandlerExecutionChain getHandlerExecutionChain(Object handler, HttpServletRequest request) {HandlerExecutionChain chain = (handler instanceof HandlerExecutionChain ?(HandlerExecutionChain) handler : new HandlerExecutionChain(handler)); String lookupPath = this.urlPathHelper.getLookupPathForRequest(request, LOOKUP_PATH);for (HandlerInterceptor interceptor : this.adaptedInterceptors) {if (interceptor instanceof MappedInterceptor) {MappedInterceptor mappedInterceptor = (MappedInterceptor) interceptor;if (mappedInterceptor.matches(lookupPath, this.pathMatcher)) {chain.addInterceptor(mappedInterceptor.getInterceptor());}}else {chain.addInterceptor(interceptor);}}return chain;}

springmvc path请求怎么映射到bean方法

这个类会根据拦截器的URL匹配规则相应添加拦截器列表。

<mvc:interceptors> <bean class="com.tpw.component.HandlerInterceptor1"></bean>    <mvc:interceptor>        <mvc:mapping path="/user"/>        <bean class="com.tpw.component.HandlerInterceptor2"></bean>    </mvc:interceptor></mvc:interceptors>

调用所有拦截器的applyPreHandle方法

boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {HandlerInterceptor[] interceptors = getInterceptors();if (!ObjectUtils.isEmpty(interceptors)) {for (int i = 0; i < interceptors.length; i++) {HandlerInterceptor interceptor = interceptors[i];if (!interceptor.preHandle(request, response, this.handler)) {triggerAfterCompletion(request, response, null);return false;}this.interceptorIndex = i;}}return true;}

 7.然后调用invocableMethod.invokeAndHandle(webRequest, mavContainer),首先通过反射调用handlerMethod中的bean的接口方法

ServletInvocableHandlerMethodpublic void invokeAndHandle(ServletWebRequest webRequest, ModelAndViewContainer mavContainer,Object... providedArgs) throws Exception { Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs);setResponseStatus(webRequest); if (returnValue == null) {if (isRequestNotModified(webRequest) || getResponseStatus() != null || mavContainer.isRequestHandled()) {disableContentCachingIfNecessary(webRequest);mavContainer.setRequestHandled(true);return;}}else if (StringUtils.hasText(getResponseStatusReason())) {mavContainer.setRequestHandled(true);return;} mavContainer.setRequestHandled(false);Assert.state(this.returnValueHandlers != null, "No return value handlers");try {this.returnValueHandlers.handleReturnValue(returnValue, getReturnValueType(returnValue), mavContainer, webRequest);}catch (Exception ex) {if (logger.isTraceEnabled()) {logger.trace(formatErrorForReturnValue(returnValue), ex);}throw ex;}}

springmvc path请求怎么映射到bean方法

最后调用HandlerMethodReturnValueHandlerComposite.handleReturnValue 进行返回值处理,例如将BEAN转JSON,转XML等。

 9.1 这个找HANDLER的过程也是,根据此HANDLER是否支持此方法,如在方法上加上了@ResponseBody,则会由RequestResponseBodyMethodProcessor处理。

RequestResponseBodyMethodProcessorpublic boolean supportsReturnType(MethodParameter returnType) {return (AnnotatedElementUtils.hasAnnotation(returnType.getContaininGClass(), ResponseBody.class) ||returnType.hasMethodAnnotation(ResponseBody.class));}
public void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType,ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);if (handler == null) {throw new IllegalArgumentException("Unknown return value type: " + returnType.getParameterType().getName());}handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest);}

springmvc path请求怎么映射到bean方法

RequestResponseBodyMethodProcessor。此类继承了AbstractMessageConverterMethodProcessor,这个类会调用当前容器工厂中所有

springmvc path请求怎么映射到bean方法

 9.2 由于我们在方法上加了@ResponseBody注解,所有此handler为

protected <T> void writeWithMessageConverters(@Nullable T value, MethodParameter returnType,ServletServerHttpRequest inputMessage, ServletServerHttpResponse outputMessage)throws IOException, HttpMediaTypeNotAcceptableException, HttpMessageNotWritableException { Object body;Class<?> valueType;Type targetType; if (value instanceof CharSequence) {body = value.toString();valueType = String.class;targetType = String.class;}else {body = value;valueType = getReturnValueType(body, returnType);targetType = GenericTypeResolver.resolveType(getGenericType(returnType), returnType.getContainingClass());}if (selectedMediaType != null) {selectedMediaType = selectedMediaType.removeQualityValue();for (HttpMessageConverter<?> converter : this.messageConverters) {GenericHttpMessageConverter genericConverter = (converter instanceof GenericHttpMessageConverter ?(GenericHttpMessageConverter<?>) converter : null);if (genericConverter != null ?((GenericHttpMessageConverter) converter).canWrite(targetType, valueType, selectedMediaType) :converter.canWrite(valueType, selectedMediaType)) {body = getAdvice().beforeBodyWrite(body, returnType, selectedMediaType,(Class<? extends HttpMessageConverter<?>>) converter.getClass(),inputMessage, outputMessage);if (body != null) {Object theBody = body;LogFormatUtils.traceDebug(logger, traceOn ->"Writing [" + LogFormatUtils.formatValue(theBody, !traceOn) + "]");addContentDispositionHeader(inputMessage, outputMessage);if (genericConverter != null) {genericConverter.write(body, targetType, selectedMediaType, outputMessage);}else {((HttpMessageConverter) converter).write(body, selectedMediaType, outputMessage);}}else {if (logger.isDebugEnabled()) {logger.debug("Nothing to write: null body");}}return;}}} }

springmvc path请求怎么映射到bean方法

3 messageConverts的数据初始化来源为 RequestMappingHandlerAdapter.getDefaultArgumentResolvers方法中,

resolvers.add(new RequestResponseBodyMethodProcessor(getMessageConverters(), this.requestResponseBodyAdvice));

messageConverts来源于RequestMappingHandlerAdapter.messageConverters中。

在初始化时会,依赖注入当前系统中所有的messageConvert.

springmvc path请求怎么映射到bean方法

最后调用拦截器的所有postHandle方法进行,处理完回调。

void applyPostHandle(HttpServletRequest request, HttpServletResponse response, @Nullable ModelAndView mv)throws Exception { HandlerInterceptor[] interceptors = getInterceptors();if (!ObjectUtils.isEmpty(interceptors)) {for (int i = interceptors.length - 1; i >= 0; i--) {HandlerInterceptor interceptor = interceptors[i];interceptor.postHandle(request, response, this.handler, mv);}}}

在渲染完输出视图后,会调用所有拦截器的afterCompletion方法,注意,jsON,XML这种没有视图,只有html等才有。

void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, @Nullable Exception ex)throws Exception { HandlerInterceptor[] interceptors = getInterceptors();if (!ObjectUtils.isEmpty(interceptors)) {for (int i = this.interceptorIndex; i >= 0; i--) {HandlerInterceptor interceptor = interceptors[i];try {interceptor.afterCompletion(request, response, this.handler, ex);}catch (Throwable ex2) {logger.error("HandlerInterceptor.afterCompletion threw exception", ex2);}}}}

“springmvc path请求怎么映射到bean方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: springmvc path请求怎么映射到bean方法

本文链接: https://lsjlt.com/news/298639.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • springmvc path请求怎么映射到bean方法
    本篇内容介绍了“springmvc path请求怎么映射到bean方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、加载注册流程&nbs...
    99+
    2023-06-20
  • springmvc path请求映射到bean 方法的流程
    一、加载注册流程 1.在dispatch-servlet.xml中配置< mvc:annotation-driven/>,在控制器的方法上加入@RequestMappin...
    99+
    2024-04-02
  • SpringMVC怎么映射请求数据
    这篇文章主要介绍了SpringMVC怎么映射请求数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringMVC怎么映射请求数据文章都会有所收获,下面我们一起来看看吧。1.获取参数值1.说明开发中,如何获取...
    99+
    2023-07-02
  • 使用SpringMVC请求怎么对handler进行映射
    这期内容当中小编将会给大家带来有关使用SpringMVC请求怎么对handler进行映射,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。请求映射源码前台发送给后台的访问请求是如何找到对应的控制器映射并执行后...
    99+
    2023-06-14
  • axios发送post请求springMVC接收不到参数怎么办
    小编给大家分享一下axios发送post请求springMVC接收不到参数怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!axios发送post请求时,出现了参数后台接收不到的情况,分...
    99+
    2024-04-02
  • 本地映射到云服务器的方法是什么
    本地映射到云服务器的方法有多种,以下是其中几种常见的方法:1. 使用远程桌面协议(Remote Desktop Protocol,简...
    99+
    2023-09-22
    云服务器
  • 云主机端口映射到内网的方法是什么
    云主机端口映射到内网的方法有两种常见的方式:1. 端口转发(Port Forwarding):通过在路由器上进行端口映射设置,将外部...
    99+
    2023-09-14
    云主机
  • vue映射的方法与怎么混入使用
    这篇文章主要介绍了vue映射的方法与怎么混入使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue映射的方法与怎么混入使用文章都会有所收获,下面我们一起来看看吧。vue映射方法与混入使用v-selec ...
    99+
    2023-06-30
  • 云服务器怎么映射网络设置方法
    云服务器是一种虚拟服务器,它提供了网络访问和远程管理的能力。在映射网络设置时,一般可以使用以下几种方法: 通过公网IP进行映射:使用Python脚本或者其他编程语言,可以向云服务器中添加一个公网IP地址。 通过域名进行映射:使用DNS ...
    99+
    2023-10-26
    服务器 方法 网络
  • Jquery怎么使用AJAX方法请求数据
    本篇内容主要讲解“Jquery怎么使用AJAX方法请求数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Jquery怎么使用AJAX方法请求数据”吧!一、AJAX请求1、jQuery.ajax(...
    99+
    2023-06-30
  • 云服务器怎么映射网络设置方法教程
    首先,需要登录到云服务器的网站,进入“控制面板”,点击“管理工具”中的“服务”选项卡; 找到“DCIM”服务,并选择“禁用”; 点击右侧的“更改设置”,在“启动类型”下拉框中选择“已禁用”; 点击右侧的“应用程序”,选择“停止该程序的运行...
    99+
    2023-10-27
    服务器 方法 教程
  • 云服务器怎么做端口映射功能设置方法
    一、端口映射功能设置方法 使用虚拟防火墙配置 在云服务器的管理控制台中,可以通过虚拟防火墙配置端口映射。虚拟防火墙可以监控云服务器内部网络流量,并根据流量类型来决定允许或禁止哪些端口的访问。虚拟防火墙的端口映射可以是单个虚拟防火墙的端...
    99+
    2023-10-27
    怎么做 端口映射 功能
  • jQuery非Ajax的POST请求方法怎么使用
    这篇文章主要介绍了jQuery非Ajax的POST请求方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jQuery非Ajax的POST请求方法怎么使用文章都会有所收获,下面我们一起来看看吧。一、AJA...
    99+
    2023-07-05
  • 云服务器映射端口到外网端口怎么设置连接方式
    如果您的云服务器映射到的外网端口是公网IP地址,您可以通过以下步骤来配置客户端与云服务器之间的连接: 使用DHCP(动态主机分配)功能设置客户端的IP地址(公网IP或私网IP)。 为客户端设置DNS(域名服务)。 将客户端与云服务器的I...
    99+
    2023-10-27
    端口 方式 服务器
  • Jquery怎么使用原生AJAX方法请求数据
    这篇文章主要介绍“Jquery怎么使用原生AJAX方法请求数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Jquery怎么使用原生AJAX方法请求数据”文章能帮助大家解决问题。1.原生ajax1....
    99+
    2023-07-05
  • STRUTS+AJAX+JSP 请求到后台乱码问题解决方法是怎样的
    本篇文章为大家展示了STRUTS+AJAX+JSP 请求到后台乱码问题解决方法是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 ...
    99+
    2024-04-02
  • 在PHP中怎么实现GET和POST请求的方法
    本篇内容主要讲解“在PHP中怎么实现GET和POST请求的方法 ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在PHP中怎么实现GET和POST请求的方法 ”吧...
    99+
    2024-04-02
  • 云服务器怎么映射端口号和网络号的设置方法
    云服务器的端口号和网络号通常是在服务器配置中设置的,可以通过以下方法进行映射和管理: 映射端口号:登录云服务器,然后选择需要映射的端口号,例如:192.168.0.1,进入映射界面。在此界面上,可以看到服务器的所有端口号(例如:http...
    99+
    2023-10-27
    端口号 服务器 方法
  • 云服务器怎么映射端口号和网络号的设置方法是什么
    打开AWS控制台,并登录您的AWS账户。 在控制台中,点击“Config”选项卡,然后选择“Network”。 在“Network”页面中,选择要映射的端口号和网络号。 确认端口号和网络号的选项,然后点击“Create Named Dom...
    99+
    2023-10-27
    端口号 服务器 方法
  • Retrofit网络请求框架之注解解析和动态代理方法怎么使用
    本篇内容介绍了“Retrofit网络请求框架之注解解析和动态代理方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Retrofit是...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作