在这篇文章中,我们将为您详细介绍在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加载静态资源)
- java – 在SpringMVC中将@Controller中的变量传递给@ControllerAdvice
- Java – 如何组合验证和AOP注释并在Spring Controller中使用它?
- JFinal在controller中加入拦截器后Controller的继承类失效
- spring @Controller 和 @RestController 注解的区别
在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
@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中使用它?
目前我们正在将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.
任何人都可以帮忙吗?
谢谢…
改变号码: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的继承类失效
首先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)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ${base} <br/> Hello! JFinal </body> </html>
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 注解的区别的相关信息,请在本站寻找。
本文标签: