假设我们有一个grails web应用程序,它暴露了几个资源.
该应用程序具有经典的Web界面,用户可以与之交互并进行一些管理.我们希望通过RESTful API将应用程序中的资源公开给客户端,并且我们不希望应用程序的这一部分混乱我们已有的控制器和代码.所以我们想出了以下内容:
如果Web界面提供了host/app_path/url/[list|show|create]
我们想要的REST API /host/app_path/rest/url
.
所以我们最终得到了以下UrlMappings文件:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
}
/* adding new urls and listing them */
"/rest/url"{
controller = "urlRest"
action = [POST: "save", PUT: "save", GET: "list", DELETE:"error"]
}
/* accessing a single url */
"/rest/url/$id"{
controller = "urlRest"
action = [POST: "update", PUT: "update", GET: "show", DELETE: "delete"]
}
/* non-crud stuff on urls */
"/rest/url/$action?/$id?"{
controller = "urlRest"
}
"/"(view:"/index")
"500"(view:'/error')
} …
Run Code Online (Sandbox Code Playgroud) 我已经搜索了谷歌,stackoverflow,以及我可以看几天的每个论坛,我的键盘很可能成为头部的目标.
我正在运行一个非常小的Spring 3.1 MVC,它具有无XML设置.问题是,当我启动时,我看到了;
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/start.action],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.xxxxxx.info.HomeController.start(javax.servlet.http.HttpServletRequest)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/*],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.xxxxxx.info.HomeController.home(java.util.Locale,org.springframework.ui.Model)
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试点击这些URL中的任何一个时,我看到我的控制器内的日志语句被激活然后立即得到;
INFO : com.xxxxxx.info.HomeController - Welcome home! the client locale is en_US
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/WEB-INF/jsps/home.jsp] in DispatcherServlet with name 'dispatcher'
Run Code Online (Sandbox Code Playgroud)
这是我的源文件.
初始化 -
public class Initializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
mvcContext.register(MvcConfig.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", …
Run Code Online (Sandbox Code Playgroud) 我正在使用带有Struts2的球衣.但是由RestFul服务调用不起作用.以下是我的配置文件
在struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<interceptors>
<interceptor-stack name="default">
<interceptor-ref name="defaultStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">ERROR</param>
<param name="params.excludeParams">/service/*</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="default" />
<action name="defaultAction"
class="com.gemini.web.controller.BinMasterController"
method="binMaster">
<result name="binMaster" type="tiles">binMaster</result>
</action>
</package>
</struts>
Run Code Online (Sandbox Code Playgroud)
在web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<!-- Client config -->
<context-param>
<param-name>
org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
</param-name>
<param-value>
/WEB-INF/tiles.xml
</param-value>
</context-param>
<filter>
<filter-name>struts2</filter-name> …
Run Code Online (Sandbox Code Playgroud) 在Grails 3.0中,如何将URL映射到该文件assets
夹下的文件?
例如:
http://localhost:8080/favicon.ico
- >grails-app/assets/images/bookmark.ico
我尝试了一些测试映射,例如:
的grails-app /控制器/ UrlMappings.groovy
class UrlMappings {
static mappings = {
...
"/t1.png" (uri: "/assets/images/test.png")
"/t2.png" (uri: "/assets/test.png")
"/t3.png" (uri: "/images/test.png")
"/t4.png" (dir: "assets/images", file: "test.png")
...
}
}
Run Code Online (Sandbox Code Playgroud)
...但它们都会导致500服务器错误.
grails url-mapping urlmappings.groovy asset-pipeline grails-3.0
在grails中创建URL的标准方法是:
<a href="${createLink(controller:'news', action: 'show', params: [id: news.id])}">${news.title}</a>
Run Code Online (Sandbox Code Playgroud)
生成网址: /news/show/102
我想要更多SEO友好的URL,如:
/news/102/this-is-the-hottest-news-today
Run Code Online (Sandbox Code Playgroud)
在Grails中最干净的方法是什么?我可以使用grails URLMapping映射/news/show/102
到/news/102
,但我如何创建像上面这样的完整URL?
试图整合hibernate和spring,我遇到了这个错误
严重:上下文初始化失败
org.springframework.beans.factory.BeanCreationException
:创建名为'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
'的bean时出错:bean的初始化失败; 嵌套异常是java.lang.IllegalStateException
:无法将处理程序'org.me.spring.hib.school.web.SchoolController#0
' 映射到URL路径[/allschools
]:已经有类型[classorg.me.spring.hib.school.web.SchoolController
]映射的处理程序.
我的控制器看起来像
package org.me.spring.hib.school.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.me.spring.hib.school.dao.SchoolDAO;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class SchoolController {
private SchoolDAO schoolDao;
public SchoolDAO getSchoolDao() {
return schoolDao;
}
public void setSchoolDao(SchoolDAO schoolDao) {
this.schoolDao = schoolDao;
}
@RequestMapping("/allschools")
public ModelAndView showAllSchools(HttpServletRequest request,HttpServletResponse response) throws Exception{
if(this.schoolDao ==null){
System.out.println("this.schoolDao is null");
}
ModelMap modelMap = new ModelMap();
modelMap.addAttribute("schoolsList", this.schoolDao.getAllSchools());
return new …
Run Code Online (Sandbox Code Playgroud) 我在UrlMappings.groovy中有下一个场景:
"/user/$action?" (controller:"user")
"/admin/$action?" (controller:"user")
"500"(controller:"error", action:"show")
"404"(controller:"error", action:"show")
Run Code Online (Sandbox Code Playgroud)
我需要知道errorController从哪个控制器抛出引发错误500的异常(如果有的话),并为用户和管理员显示不同的错误页面.
有任何想法吗?
提前致谢.
有一个groovy/grails等同于PHP的parse_url(http://php.net/manual/en/function.parse-url.php)或python的urlparse(http://docs.python.org/library/urlparse.html)将URL字符串转换为包含主机,协议,查询字符串,片段,URI等的结构?
我以为它可能在grails.org/doc/latest/api/org/codehaus/groovy/grails/web/util/WebUtils.html中,但没有看到任何内容.我不认为HTTPBuilder或各种URLMapping实用程序是我需要的.
我真的只想从路径和queryString中拉出一个地图并正确处理边缘情况(params /blah/fuzz?foo=bar&foo=baz
,片段/blah/fuzz?foo=bar#baz
,重定向的编码URL).
我知道我可以通过巧妙地使用URLMapping来处理PATH组件,例如:/blah/$code
,但我离开了解码param块...
谢谢
我想映射一个位于我的web-app目录中的静态文件sitemap.xml和robots.txt.网址应如下:
http://www.mydomain.com/sitemap.xml
http://www.mydomain.com/robots.txt
Run Code Online (Sandbox Code Playgroud)
如何设置网址映射以使这些路由有效?
我使用 Laravel 5.4,现在我想对控制器进行动态路由,这意味着我可以直接访问UserController
和Profile
函数抛出路由,例如。
GET http://localhost/user/profile?userid=123
Run Code Online (Sandbox Code Playgroud)
上面的示例网址意愿访问UserController
和功能profile
与后动态参数?
。如果我想访问不同的控制器,我只需要将user
param更改为Controller
name。
我创建了一条这样的路线并且它有效。
Route::get('v1/{controller_name}/{function_name}/{query?}', function ($controller_name, $function_name){
$app = app();
$controller = $app->make('\App\Http\Controllers\Api\\'.$controller_name.'Controller');
return $controller->callAction($function_name, $parameters = array());
});
Run Code Online (Sandbox Code Playgroud)
但我不知道如何传递参数。
还有其他更好的方法来做到这一点吗?
url-mapping ×10
grails ×6
groovy ×2
java ×2
spring-mvc ×2
url ×2
dry ×1
grails-2.0 ×1
grails-3.0 ×1
jersey ×1
laravel ×1
laravel-5 ×1
parsing ×1
php ×1
rest ×1
restful-url ×1
seo ×1
spring ×1
struts2 ×1
tomcat7 ×1
url-routing ×1