GVKun编程网logo

如何在Spring MVC Controller获取呼叫中提取IP地址?

16

如果您对如何在SpringMVCController获取呼叫中提取IP地址?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于如何在SpringMVCController获取呼

如果您对如何在Spring MVC Controller获取呼叫中提取IP地址?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于如何在Spring MVC Controller获取呼叫中提取IP地址?的详细内容,并且为您提供关于asp.net-mvc – 如何使用ASP.NET MVC ApiController获取GET参数、java – Spring MVC中的@Controller注释和Controller类、java – 在SpringMVC中将@Controller中的变量传递给@ControllerAdvice、Spring MVC Controller 要点的有价值信息。

本文目录一览:

如何在Spring MVC Controller获取呼叫中提取IP地址?

如何在Spring MVC Controller获取呼叫中提取IP地址?

我正在从事Spring MVC控制器项目,在该项目中,我正在从浏览器进行GET URL调用-

以下是我从浏览器进行GET调用的网址-

http://127.0.0.1:8080/testweb/processing?workflow=test&conf=20140324&dc=all

下面是在点击浏览器后调用的代码-

@RequestMapping(value = "processing", method = RequestMethod.GET)public @ResponseBody ProcessResponse processData(@RequestParam("workflow") final String workflow,    @RequestParam("conf") final String value, @RequestParam("dc") final String dc) {        System.out.println(workflow);        System.out.println(value);        System.out.println(dc);        // some other code    }

问题陈述:-

现在有什么方法可以从某些标头中提取IP地址吗?这意味着我想知道从哪个IP地址发出呼叫,这意味着无论谁在URL上方进行呼叫,我都需要知道其IP地址。这可能吗?

答案1

小编典典

解决方法是

@RequestMapping(value = "processing", method = RequestMethod.GET)public @ResponseBody ProcessResponse processData(@RequestParam("workflow") final String workflow,    @RequestParam("conf") final String value, @RequestParam("dc") final String dc, HttpServletRequest request) {        System.out.println(workflow);        System.out.println(value);        System.out.println(dc);        System.out.println(request.getRemoteAddr());        // some other code    }

添加HttpServletRequest request到您的方法定义中,然后使用Servlet API

spring文档在这里说

15.3.2.3支持的处理程序方法参数和返回类型

Handler methods that are annotated with @RequestMapping can have very flexible signatures.Most of them can be used in arbitrary order (see below for more details).Request or response objects (Servlet API). Choose any specific request or response type,for example ServletRequest or HttpServletRequest

asp.net-mvc – 如何使用ASP.NET MVC ApiController获取GET参数

asp.net-mvc – 如何使用ASP.NET MVC ApiController获取GET参数

我觉得有点荒唐的问题,但我找不到一种方法来获取获取请求的参数
/ api / foo?sort = name为例.

在ApiController类中,我给了一个公共字符串Get().放置Get(字符串排序)使/ api / foo成为一个不好的请求. ApiController中的请求实例的类型为System.Net.Http.HttpRequestMessage.它没有QueryString或Parameters属性或任何东西.

解决方法

你可以使用
HttpContext.Current.Request.QueryString

java – Spring MVC中的@Controller注释和Controller类

java – Spring MVC中的@Controller注释和Controller类

当我使用 Spring 3.x时
在使用注释时,我很难知道我们要使用这个@Controller获取哪种类型的Controller类
参考

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/Controller.html

这些是实现Controller类

AbstractController
AbstractUrlViewController
MultiActionController
ParameterizableViewController
ServletForwardingController
ServletWrappingController
UrlFilenameViewController
AbstractWizardFormController
SimpleFormController

但是当我们在Spring MVC中使用@Controller注释时
程序如何知道我们的@Controller注释正在实现
任何这些控制器,请有人解释我

解决方法

我想你在这里忽略了这一点.在过去注册控制器的过程中,您的类必须已实现控制器接口并选择请求映射类型.有时您必须实现大量代码才能实现单个请求映射.

如今,当我们有注释时,模型已经改变了.我们可以为每个控制器类处理多个请求类型.因为在单个@Controller注释类中,我们可以处理许多请求映射.

Controller注释是一个专门的@Component,它告诉Spring它内部会找到@RequestMapping处理程序.这些处理程序可用于返回Json,HTML或上传文件.

现在,与同一模块连接的逻辑可以放在单个控制器类下,您可以更灵活地实现所需的功能.其次,@ Controller使我们能够显着减少代码量.

java – 在SpringMVC中将@Controller中的变量传递给@ControllerAdvice

java – 在SpringMVC中将@Controller中的变量传递给@ControllerAdvice

我创建了@ControllerAdvice,它必须为我设置一些模型属性.

@modelattribute
public void globalAttributes(Model model) {
       model.addAttribute("pageId",PAGE_ID);
}

这是我需要的一般示例,PAGE_ID表示实际控制器必须设置的一些变量.由于@ControllerAdvice在控制器之前运行,我如何声明这个变量并在Advice中使用它?如果这是可能的.

解决方法

我认为更好的解决方案是为控制器使用某种抽象类模式

public abstract class AbstractController {

    @modelattribute
    public void globalAttributes(Model model) {
       model.addAttribute("pageId",getPageId());
    }

    abstract String getPageId();
}

public class MyController extends AbstractController {

    @Override
    public String getPageId() {
       return "MyPageID"
    }

    //..your controller methods
}

Spring MVC Controller 要点

Spring MVC Controller 要点

今天看到一篇讲解 Spring MVC Controller 的文章,比较详细,顺道翻译下。

在 Spring MVC 中,我们写一个 Controller 类来处理客户端的请求。在 Controller 中处理相关的业务流程与业务逻辑并且通过 Spring 的 dispatcher servlet 返回对应的结果输出。这就是一个典型的 request response 周期。 ##1. 使用 @Controller 注解

创建一个 Controller 类。在这个 Controller 来处理多个不同的提交。示例: import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {
 
    @RequestMapping("/")
    public String visitHome() {
 
        // do something before returning view name
 
        return "home";
    }
}

当应用访问路径为根目录(/)时 进入这个方法

注意: 在 Spring 的配置文件中加入如下配置:

<annotation-driven />

也可以设置上 Controller 的扫描路径

<context:component-scan base-package="net.codejava.spring" />

使用 @Controller 注解,你可以提交多个表单到这个类中处理这些不同请求:

@Controller
public class MultiActionController {
 
    @RequestMapping("/listUsers")
    public ModelAndView listUsers() {
 
    }
 
    @RequestMapping("/saveUser")
    public ModelAndView saveUser(User user) {
 
    }
 
    @RequestMapping("/deleteUser")
    public ModelAndView deleteUser(User user) {
 
    }
}

你的提交路径可以为 /listUsers, /saveUser 和 /deleteUser

##2. 实现 Controller 接口

另一个创建 Controller 的方法就是实现 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 MainController implements Controller {
 
    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        System.out.println("Welcome main");
        return new ModelAndView("main");
    }
}

实现这个接口必须重写 handleRequest () 这个方法。这样才能被 spring 的 dispatcher servlet 捕获。当一个方法进来,request 的 Url 需要匹配如下的 Spring 配置:

<bean name="/main" class="net.codejava.spring.MainController" />

这种方法的缺点就是无法处理多个不同的提交请求。

##3.Extending the AbstractController Class

可以简单的处理 Http 请求方法类型(GET/POST),管理页面的缓存设置,即是否允许浏览器缓存当前页面;管理执行流程在会话(Session)上的同步。实例: import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
 
public class BigController extends AbstractController {
 
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        System.out.println("You''re big!");
        return new ModelAndView("big");
    }
}

Spring 中的配置:

<bean name="/big" class="net.codejava.spring.BigController">
    <property name="supportedMethods" value="POST"/>
</bean>

##4. 通过 URL 映射处理提交。

这个就是我们经常用到的了。

@RequestMapping("/login")

当请求 Url 匹配以上的路径 login 就会进入到这个 Controller 中。示例:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
public class UserController {
 
    @RequestMapping("/listUsers")
    public String listUsers() {
        return "ListUsers";
    }
 
    @RequestMapping("/saveUser")
    public String saveUser() {
        return "EditUser";
    }
 
    @RequestMapping("/deleteUser")
    public String deleteUser() {
        return "DeleteUser";
    }
}

@RequestMapping 这个注解也可以设置多个相同的操作的 url 提交到同一个方法中 ,示例:

@RequestMapping({"/hello", "/hi", "/greetings"})

##5 指定 http 请求方式

通过 @RequestMapping 注解的参数,指定方法处理指定的 http 请求。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
public class LoginController {
 
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String viewLogin() {
        return "LoginForm";
    }
 
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String doLogin() {
        return "Home";
    }
}

可以看到,以上的 url 相同,指定的提交方式不同,会通过提交方式进入不同的方法。

##6. 请求参数的映射处理:

可以通过 @RequestParam 来接收表单参数提交并处理示例:

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String doLogin(@RequestParam String username,
                      @RequestParam String password) {
 
}

会 binds 提交的 username 以及 password 参数。get 的 url 会是这个样子:

http://localhost:8080/spring/login?username=scott&password=tiger

下面是几个常见数据处理示例:

@RequestParam int securityNumber//自动转化为int型
@RequestParam("SSN") int securityNumber//提交的参数与定义不同
@RequestParam(required = false) String country//非必须的接收参数
@RequestParam(defaultValue = "18") int age//设置参数默认值
doLogin(@RequestParam Map<String, String> params)//将提交所有信息放如map中

//使用HttpServletRequest 和 HttpServletResponse
@RequestMapping("/download")
public String doDownloadFile(
        HttpServletRequest request, HttpServletResponse response) {
 
    // access the request
 
    // access the response
 
    return "DownloadPage";
}

##7. 返回 Model 以及 View

将数据处理封装之后返回视图层。

//返回登录页面:loginForm
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String viewLogin() {
    return "LoginForm";
}

//封装数据返回视图层
@RequestMapping("/listUsers")
public ModelAndView listUsers() {
 
    List<User> listUser = new ArrayList<>();
    // get user list from DAO...
 
    ModelAndView modelView = new ModelAndView("UserList");
    modelView.addObject("listUser", listUser);
 
    return modelView;
}

//将数据装入model 返回视图层
@RequestMapping(method = RequestMethod.GET)
public String viewStats(Map<String, Object> model) {
    model.put("siteName", "CodeJava.net");
    model.put("pageviews", 320000);
 
    return "Stats";
}


//重定向到一个页面
// check login status....
if (!isLogin) {
    return new ModelAndView("redirect:/login");
}
// return a list of Users

##8. 验证表单提交。 Spring 可以简单的绑定数据到 一个 bean 中并经行校验。示例:

@Controller
public class RegistrationController {
 
    @RequestMapping(value = "/doRegister", method = RequestMethod.POST)
    public String doRegister(
        @ModelAttribute("userForm") User user, BindingResult bindingResult) {
 
        if (bindingResult.hasErrors()) {
            // form validation error
 
        } else {
            // form input is OK
        }
 
        // process registration...
 
        return "Success";
    }
}

这里给出一篇问下 详细说明了 BindingResult 的处理 Spring MVC Form Validation Example with Bean Validation API

##9. 处理上传表单: Spring 使用 Apache Commons FileUpload 作为上传的处理。示例:

@RequestMapping(value = "/uploadFiles", method = RequestMethod.POST)
public String handleFileUpload(
        @RequestParam CommonsMultipartFile[] fileUpload) throws Exception {
 
 
    for (CommonsMultipartFile aFile : fileUpload){
 
        // stores the uploaded file
        aFile.transferTo(new File(aFile.getOriginalFilename()));
 
    }
 
 
    return "Success";
}

今天关于如何在Spring MVC Controller获取呼叫中提取IP地址?的分享就到这里,希望大家有所收获,若想了解更多关于asp.net-mvc – 如何使用ASP.NET MVC ApiController获取GET参数、java – Spring MVC中的@Controller注释和Controller类、java – 在SpringMVC中将@Controller中的变量传递给@ControllerAdvice、Spring MVC Controller 要点等相关知识,可以在本站进行查询。

本文标签: