GVKun编程网logo

在Spring Controller中加载静态文件(spring加载静态资源)

17

在这篇文章中,我们将为您详细介绍在SpringController中加载静态文件的内容,并且讨论关于spring加载静态资源的相关问题。此外,我们还会涉及一些关于java–在SpringMVC中将@C

在这篇文章中,我们将为您详细介绍在Spring Controller中加载静态文件的内容,并且讨论关于spring加载静态资源的相关问题。此外,我们还会涉及一些关于java – 在SpringMVC中将@Controller中的变量传递给@ControllerAdvice、Java – 如何组合验证和AOP注释并在Spring Controller中使用它?、JFinal在controller中加入拦截器后Controller的继承类失效、spring @Controller 和 @RestController 注解的区别的知识,以帮助您更全面地了解这个主题。

本文目录一览:

在Spring Controller中加载静态文件(spring加载静态资源)

在Spring Controller中加载静态文件(spring加载静态资源)

我是Spring的新手,如果我在这里看不到明显的答案,就此道歉。

我使用Spring MVC控制器设置了一个小型演示项目,并将其部署到App Engine。在我的控制器中,我想将静态文件的内容读入字符串。最好的方法是什么?

我在Google上搜索了一下,但可能正在寻找错误的内容。我尝试了以下操作,但不起作用:

@Controller@RequestMapping("/myController")public class MyController {    @RequestMapping(value = "/test", method = RequestMethod.GET)    public @ResponseBody String myTest() {        FileReader fileReader = null;        BufferedReader bufferedReader = null;        String content = "";        try {            fileReader = new FileReader("file:/WEB-INF/content/somecontent.txt");            bufferedReader = new BufferedReader(fileReader);            content = bufferedReader.readLine();            bufferedReader.close();         }        catch (Exception ignored) {             // ignore        }        return content;    }}

任何朝着正确方向的推动将受到高度赞赏:-)

答案1

小编典典

FileReader的符号“ file:”和“ classpath:”不正确。我建议您创建一个FileSystemResource

FileSystemResource resource = new FileSystemResource("/WEB-INF/content/somecontent.txt");

然后使用getFile()或getInputStream()读取文件。这在Web应用程序中非常有用,因为您可以使用相对路径。

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
}

Java – 如何组合验证和AOP注释并在Spring Controller中使用它?

Java – 如何组合验证和AOP注释并在Spring Controller中使用它?

目前我们正在将Struts 1.1项目迁移到Spring 4.x.

我们已经成功地将Action类转换为Controller并将formbean转换为Model,甚至我们也能够将struts验证转换为Spring验证.

但是当我们尝试为所有控制器添加AOP时,我们遇到了一个问题.
目的是添加一个日志来测量所有控制器方法所需的时间.

下面是代码片段,

@Component
@Controller
public class LoginController {

   @Autowired
       private LoginValidator loginValidator;

   @InitBinder
     private void initBinder(WebDataBinder binder) {
        binder.setValidator(loginValidator);
    }

   @RequestMapping(value = "/login",method = RequestMethod.POST)
  public String loginUser(@Valid @modelattribute Login form,BindingResult bindingResult) {
    System.out.println("Entering loginController.loginUser method");
   }
}

我们使用下面的切点来应用aop,

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class Logging {

  @pointcut("execution(* com.controller.*.*(..))")
  public void businessLogicmethods() {}

  @Around("businessLogicmethods()")
  public Object logAround(ProceedingJoinPoint jp) {

    System.out.println("around() is running!");
    System.out.println(jp.getSignature().getName());
    System.out.println(jp.getArgs());
    Object obj = null;
    try {
      obj = jp.proceed();
    } catch (Throwable e) {
      e.printstacktrace();
    }
    System.out.println("******");
    return obj;
  }
}

验证或AOP一次正在运行.如果未应用AOP,则触发验证.如果应用aop,则仅触发AOP.

任何人都可以帮忙吗?

谢谢…

最佳答案
我得到了这个工作.你必须做2次更改.

改变号码:1

>出于某种原因,您的Aspect定义是错误的.(不知道为什么).但是以下方面将起作用.

@Component
@Aspect
public class Logging {

static final Logger LOG = LoggerFactory.getLogger(Logging.class);

@pointcut("within(@org.springframework.stereotype.Controller *)")
public void controller() {}

@pointcut("execution(* *(..))")
public void methodpointcut() {}

@pointcut("within(@org.springframework.web.bind.annotation.RequestMapping *)")
public void requestMapping() {}

@Before("controller() && methodpointcut() && requestMapping()")
public void aroundControllerMethod(JoinPoint joinPoint) throws Throwable {
    LOG.info("Invoked: " + niceName(joinPoint));
}

@AfterReturning("controller() && methodpointcut() && requestMapping()")
public void afterControllerMethod(JoinPoint joinPoint) {
    LOG.info("Finished: " + niceName(joinPoint));
}

private String niceName(JoinPoint joinPoint) {
    return joinPoint.getTarget().getClass()
            + "#" + joinPoint.getSignature().getName()
            + "\n\targs:" + Arrays.toString(joinPoint.getArgs());
}

}

改变号码:2

initBinder应该声明为public.目前,您已将此方法定义为私有.我再次不确定为什么没有这些方面,这项工作是正确的.

   @InitBinder
     public void initBinder(WebDataBinder binder) {
        binder.setValidator(loginValidator);
     }

这两个变化将起作用.

JFinal在controller中加入拦截器后Controller的继承类失效

JFinal在controller中加入拦截器后Controller的继承类失效

首先Controller的继承类BaseController重写render方法。


package com.myc.controller;

import com.jfinal.core.Controller;

public abstract class BaseController extends Controller {

    protected static String root;

    public String getroot() {
        return root;
    }

    @Override
    public void render(String view) {
        if (root == null)
            root = this.getRequest().getContextPath();
        this.setAttr("base", root);
        super.render(view);
    }
    
}

然后所有controller都继承BaseController



package com.myc.controller.jfinal;

import com.myc.controller.BaseController;
import com.jfinal.ext.route.ControllerBind;

@ControllerBind(controllerKey = "/test")
public class TestController extends BaseController {
	public void index() {
		render("test/index");
	}
}

没有加入拦截器,调试成功。


然后我加入了一个拦截器Flash。http://my.oschina.net/myaniu/blog/136340

package com.myc.controller.jfinal;

import com.jfinal.aop.Before;
import com.jfinal.ext.route.ControllerBind;
import com.jfinal.flash.Flash;

@ControllerBind(controllerKey = "/test")
@Before(Flash.class)
public class TestController extends BaseController {
	public void index() {
		render("test/index");
	}
}



运行报错:

2015-08-18 17:11:34
[ERROR]-[Thread: http-8080-1]-[freemarker.log.Log4JLoggerFactory$Log4JLogger.error()]: Template processing error: "Expression base is undefined on line 8, column 3 in WEB-INF/template/test/index.html."

Expression base is undefined on line 8, column 3 in WEB-INF/template/test/index.html.
The problematic instruction:
----------
==> ${base} [on line 8, column 1 in WEB-INF/template/test/index.html]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression base is undefined on line 8, column 3 in WEB-INF/template/test/index.html.
	at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
	at freemarker.core.Expression.getStringValue(Expression.java:118)
	at freemarker.core.Expression.getStringValue(Expression.java:93)
	at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.MixedContent.accept(MixedContent.java:92)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Environment.process(Environment.java:199)
	at freemarker.template.Template.process(Template.java:259)
	at com.jfinal.render.FreeMarkerRender.render(FreeMarkerRender.java:128)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:93)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)



index.html 如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${base}
<br/>
Hello! JFinal
</body>
</html>



spring @Controller 和 @RestController 注解的区别

spring @Controller 和 @RestController 注解的区别

@Controller弹簧和@RestController注释之间的区别。

注释可以@Controller同时用于 Web MVC 和 REST 应用程序吗?
如果是,我们如何区分它是 Web MVC 还是 REST 应用程序。

关于在Spring Controller中加载静态文件spring加载静态资源的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于java – 在SpringMVC中将@Controller中的变量传递给@ControllerAdvice、Java – 如何组合验证和AOP注释并在Spring Controller中使用它?、JFinal在controller中加入拦截器后Controller的继承类失效、spring @Controller 和 @RestController 注解的区别的相关信息,请在本站寻找。

本文标签: