我正在写博客,并在互联网上遇到了两种不同的分页替代方法。我无法决定使用哪个。网址类型就像;
博客/页/2
博客/?page=2
其中一个比另一个有优势吗?
我正在使用 wiremock 来模拟某些请求及其各自的响应,但我正在尝试添加一个正则表达式。不幸的是,这只是抛出一个异常,指出请求不匹配。
{
"request" : {
"method": "GET",
"urlPattern": "/my/service/url?^.*(specificParam.*(M[0-9]{9})).*$"
},
"response": {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过
"urlPattern": "/my/service/url\\?^.*(specificParam.*(M[0-9]{9})).*$"
Run Code Online (Sandbox Code Playgroud)
我发送的请求是
/my/service/url?saml2=disabled&filter=specificParam%20eq%20%27M012345678%27
有谁知道为什么请求与映射不匹配?提前致谢。
我使用Spring来渲染我的JSP,而我的url-pattern DispatcherServlet是"/".这似乎是为了使欢迎文件列表永远不会被考虑.我真的想DispatcherServlet处理除"/"之外的所有事情.但是,我想避免文件扩展名(例如,*.html,.do等),并且我正在使用InternalResourceViewResolver,因此将调度程序servlet的url-pattern设置为"/ "会使其接受太多(例如对InternalResourceViewResolver生成的JSP页面的内部请求将被调度程序servlet拦截,然后调度程序servlet会因为没有/WEB-INF/jsp/about.jsp的映射而抛出错误.任何帮助将不胜感激 - 我对Spring 很新(例如2天;-))
以下是相应的文件:
目录结构
/war (I'm using AppEngine)
index.jsp (Simply includes WEB-INF/jsp/index.jsp)
/WEB-INF
XML Config files
/jsp
index.jsp
about.jsp
...
Run Code Online (Sandbox Code Playgroud)
web.xml中
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!--
We purposefully do not make this /*. The convention here is to define
mappings for files that exist, and write a good 404 page for anything
else. …Run Code Online (Sandbox Code Playgroud) 可能重复:
Servlet映射/ vs/*
servlet url映射中'/'和'/*'有什么区别?
因为我正在阅读春天的书,我找到了这些话:
接下来,我们必须指出DispatcherServlet将处理哪些URL.通常会发现DispatcherServlet映射到URL模式,例如.htm,/或/ app.但是这些URL模式存在一些问题:
- *.htm模式意味着响应将始终采用HTML格式(正如我们将在第11章中学到的那样,并不一定如此).
- 将其映射到/*并不意味着任何指定的响应类型,但表示DispatcherServlet将为所有请求提供服务.这使得服务静态内容(如图像和样式表)比必要更困难.
- / app模式(或类似的东西)帮助我们区分Dispatcher-Servlet提供的内容与其他类型的内容.但是我们在URL中公开了一个实现细节(特别是/ app路径).这导致复杂的URL重写策略隐藏/ app路径.
而不是使用任何有缺陷的servlet映射方案,我更喜欢像这样映射DispatcherServlet:
Run Code Online (Sandbox Code Playgroud)<servlet-mapping> <servlet-name>spitter</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>通过将DispatcherServlet映射到/,我说它是默认的servlet,并且它将负责处理所有请求,包括对静态内容的请求.
根据上面的话,似乎'/'和'/*'都将服务于所有请求.
有什么不同?
我正在开发需要加载动态模块(在运行时)的Django应用程序。现在,我可以上载(从客户端浏览器到服务器)“插件”并在数据库中注册插件模型,等等。但是我需要一种方法来处理每个插件的urlpatterns。当前,我已经在webapp的“核心”中编写了一个函数,该函数注册了一个模型,并(通过理论上)通过包含该插件将上传插件的urlpatterns添加到了webapp urls.py中。该函数是:
def register_plugin_model(model,codename):
# Standard syncdb expects models to be in reliable locations,
# so dynamic models need to bypass django.core.management.syncdb.
# On the plus side, this allows individual models to be installed
# without installing the entire project structure.
# On the other hand, this means that things like relationships and
# indexes will have to be handled manually.
# This installs only the basic table definition.
if model is not None:
style = color.no_style()
cursor = connection.cursor() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Tomcat 7,Apache Wink和Jackson JSON处理器来做一个简单的REST Web应用程序,但是似乎遇到了麻烦。如果查看我的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>
<display-name>Example Web Application</display-name>
<servlet>
<servlet-name>ExampleServlet</servlet-name>
<servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.dummy.example.server.ExampleApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ExampleServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
现在,如果我用/ *代替URL模式,则REST调用有效,但是当我使用/ services / *时,它将失败。
在我的ExampleApplication中,我看到:
package com.dummy.example.server;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
import org.codehaus.jackson.map.AnnotationIntrospector;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
public class ExampleApplication extends Application {
/**
* Get the list of service classes provided by this JAX-RS application
*/
@Override
public …Run Code Online (Sandbox Code Playgroud) 我已经开发了自己的,但看起来这是一个非常好的事情,其他人可能首先想到它并做得更好;)
目标是能够在myapp/views.py中编写
router = Router(prefix=r'^myapp/')
@router.route(url=r'my/url/here', name="my-great-view")
def myview(request):
return render_to_response("mytemplate.html", {})
Run Code Online (Sandbox Code Playgroud)
然后在urls.py中
urlpatterns += myapp.views.router.get_patterns()
Run Code Online (Sandbox Code Playgroud)
我还内置了其他一些很酷的装饰器(@jsonview用于获取返回的字典并进行json响应,@ use_template用于获取返回的字典并将其作为上下文传递给定义的模板...)
看起来这种方式使得一切都更加本地化,可读性更强.在查看视图函数时,您不必搜索它以查找它所属的URL,或者它的"命名".
我看到了这个djangosnippet,但它比我想要的更加神奇,它看起来并不像它被普遍采用.
如果没有人将标准解决方案放在一起,我应该清理我的并向contrib提交拉取请求吗?
编辑: 如果您想要同一视图的多个网址:
@router.route(url="my-first-url", kwargs={'foo':'bar'})
@router.route(url="my-second=url", kwargs={'foo':'baz'})
def my_view(...): ...
Run Code Online (Sandbox Code Playgroud)
而当然,这并不一定是唯一做到这一点的方式-正常urlpatterns的方式大约有两份一些不错的事情,但是这两种方法并不是相互排斥的.
我使用spring mvc 3编写了一个Web应用程序.它提供了一个返回JSON的单个端点.我确实使用url参数成功运行它,但现在我需要更改它以使用路径变量.
我换了控制器
从:
@Controller
public class DataController {
@Autowired
private IDataService dateService;
@RequestMapping(
value = "/some/data",
method = RequestMethod.GET,
produces = "application/json"
)
public @ResponseBody Data getDataByCode(@RequestParam String code) {
return versionService.getDataByCode(code);
}
}
Run Code Online (Sandbox Code Playgroud)
至:
@Controller
public class DataController {
@Autowired
private IDataService dateService;
@RequestMapping(
value = "/some/data/{code}",
method = RequestMethod.GET,
produces = "application/json"
)
public @ResponseBody Data getDataByCode(@PathVariable String code) {
return versionService.getDataByCode(code);
}
}
Run Code Online (Sandbox Code Playgroud)
和我的web xml来映射网址...
从:
<servlet>
<servlet-name>dataBycode</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/config/servlet-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping> …Run Code Online (Sandbox Code Playgroud) 使用 Spring for Security,我可以使用以下代码运行程序。
<intercept-url pattern="/web/admin**/**" access="ROLE_ADMIN" requires-channel="https"/>
<intercept-url pattern="/web/**/" access="ROLE_USER,ROLE_ADMIN" requires-channel="https"/>
Run Code Online (Sandbox Code Playgroud)
我目前正在尝试在 web.xml 中执行此操作。使用 JBOSS 部署 .war 文件。下面是我所拥有的,网址模式是导致我出现第一个安全约束问题的原因。这些页面位于,并命名为 /web/adminarchive /web/adminsettings /web/adminstuff 等... Spring 中的上面的代码按照我想要的方式处理它,URL 是 /web/admin**/** 到捕获所有管理页面。我注释掉了 /* 部分,因为我知道它有效,只留下了管理部分。使用该结构不会引发任何错误,它只是根本不提示登录。
<security-constraint>
<web-resource-collection>
<web-resource-name>Name</web-resource-name>
<url-pattern>/web/admin**/**</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>ROLE_ADMIN</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Name</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>ROLE_USER</role-name>
</auth-constraint>
</security-constraint>
Run Code Online (Sandbox Code Playgroud) 我想阻止访问末尾有多余字符的网址。
例如我希望 nginx 阻止请求https://www.example.com/url-pattern/amp/extra-chars/more-extra
但希望它允许https://www.example.com/url-pattern/amp或https://www.example.com/url-pattern/amp/
这行得通吗?
location .*\/amp\/. {
deny all
}
Run Code Online (Sandbox Code Playgroud)
请指导。