我正在使用Spring MVC 3开发一个webapp,并且DispatcherServlet像'so'一样捕获所有请求(web.xml):
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
现在这可以像宣传的那样工作,但是我如何处理静态内容呢?以前,在使用RESTful URL之前,我会抓住所有*.html并将其发送给DispatcherServlet,但现在它是一个不同的球类游戏.
我有一个/ static /文件夹,其中包含/ styles /,/ js /,/ images/etc,我想从中排除/ static/*DispatcherServlet.
现在,当我这样做时,我可以获得静态资源:
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
但我希望它有很好的URL(我使用Spring MVC 3)而不是登陆页面www.domain.com/app/
我也不希望解决方案耦合到tomcat或任何其他servlet容器,并且因为这是(相对)低流量我不需要网络服务器(如apache httpd)infront.
有一个干净的解决方案吗?
我写了一个过滤器,需要每一个在我的网站上的网址,除了CSS,JS和图像文件访问时被调用.所以在我的定义中,我希望有类似的东西:
<filter-mapping>
<filter-name>myAuthorizationFilter</filter-name>
<url-pattern>NOT /css && NOT /js && NOT /images</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
反正有没有这样做?我能找到的唯一文件只有/*
更新:
我最终使用类似于Mr.J4mes提供的答案:
private static Pattern excludeUrls = Pattern.compile("^.*/(css|js|images)/.*$", Pattern.CASE_INSENSITIVE);
private boolean isWorthyRequest(HttpServletRequest request) {
String url = request.getRequestURI().toString();
Matcher m = excludeUrls.matcher(url);
return (!m.matches());
}
Run Code Online (Sandbox Code Playgroud) 我有一个servlet作为前端控制器.
@WebServlet("/*")
Run Code Online (Sandbox Code Playgroud)
但是,这也处理CSS和图像文件.我怎么能阻止这个?
web.xml中
<filter>
<filter-name>SessionCheckFilter</filter-name>
<filter-class>filter.SessionCheckFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionCheckFilter</filter-name>
<url-pattern>/faces/app/admin/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
我试图排除/faces/app/admin/index.xhtml唯一的,有没有办法做到这一点?
如果在web.xml中没有排除url patterin,也许我可以操纵该doFilter()方法来排除url?
我有一个配置为处理所有URL(*)的servlet :
<servlet>
<servlet-name>MyServ</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServ</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我需要为URLS开头/static/,它应该从静态服务它们WEB-INF.也就是说,MyServ应该成为一切不过 /static.
我怎样才能做到这一点?
更新:澄清一下,我想要的是:
/*/- 转到MyServ
/static/dir/file.css- Jetty从/ dir /提供静态file.css.
我不确定要做什么的web.xml,或者放置静态文件的位置.
我尝试添加这个:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
但是,当我转到/static/URL时,我得到:
HTTP ERROR 404
Problem accessing /static/dir/file.css. Reason:
Not Found
Powered by Jetty://
Run Code Online (Sandbox Code Playgroud)
我不知道如果我的web.xml文件是错误的,或者如果我只是把文件在错误的地方(我已经下试过src/main/webapp和src/main/webapp/lib/META-INF/resources/)
我正在使用Jetty.我想避免任何其他层,如Nginx,Apache等.
为了赢得赏金,请确保您回答Jetty的作品.
我用jersey来创建webservices.我已经创建了请求过滤器ContainerRequestFilter.我只针对某些URI问题浏览了 泽西请求过滤器,但我想排除某些网址的过滤器.
@Provider
public class AuthFilter implements ContainerRequestFilter{
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
// business logic
}
}
Run Code Online (Sandbox Code Playgroud) JSF 2.2和Primefaces 6.0
我正在尝试使用过滤器类进行身份验证会话控制。但是过滤器类运行21次,并且浏览器设置了错误消息ERR_TOO_MANY_REDIRECTS。
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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>maintenancemonitoring</display-name>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<filter>
<filter-name>authFilter</filter-name>
<filter-class>view.filters.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>*.xhtml</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>cupertino</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)
过滤器类别:
public void
doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException,
ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest; …Run Code Online (Sandbox Code Playgroud) 如何从过滤器中排除特定格式的URL?
有标准方法还是替代解决方案?
java ×4
servlets ×3
web.xml ×2
filter ×1
jersey ×1
jsf ×1
spring ×1
spring-mvc ×1
tomcat ×1
url ×1
url-pattern ×1
web-services ×1