web.xml 笔记(一)- on Google Engine

web.xml 笔记(一)- on Google Engine

preface

About Deployment Descriptors

一个网络应用的部署描述文件包括对于该应用classes, resources and configuration的描述,以及web server应该如何将client的请求映射到处理方法中。

这个部署描述文件就是web.xml。其目录在WEB-INF/目录下。其根节点是

以下是一个简单的web.xml的例子:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
    <servlet>
        <servlet-name>comingsoon</servlet-name>
        <servlet-class>mysite.server.ComingSoonServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>comingsoon</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

Note:如果使用了Modules,具体配置详见Modules Document

Servlets and URL Paths

web.xml中的映射使得web server可以将外部的请求指向某一个servlet,并使用其方法来处理该请求:
- 通过来声明一个servlet
- 通过来定义一个从URL到一个servlet的映射

声明了一个可以在该xml文件中让其他元素引用的名字、一个被用作servlet的类、以及初始化的参数。你可以用同一个类声明多个servlet(但是初始参数不能相同),每一个声明的servlet名字必须在部署描述文件中独一无二

    <servlet>
        <servlet-name>redteam</servlet-name>
        <servlet-class>mysite.server.TeamServlet</servlet-class>
        <init-param>
            <param-name>teamColor</param-name>
            <param-value>red</param-value>
        </init-param>
        <init-param>
            <param-name>bgColor</param-name>
            <param-value>#CC0000</param-value>
        </init-param>
    </servlet>

    <servlet>
        <servlet-name>blueteam</servlet-name>
        <servlet-class>mysite.server.TeamServlet</servlet-class>
        <init-param>
            <param-name>teamColor</param-name>
            <param-value>blue</param-value>
        </init-param>
        <init-param>
            <param-name>bgColor</param-name>
            <param-value>#0000CC</param-value>
        </init-param>
    </servlet>

指定了一个URL pattern,以及一个声明了的servlet 名字,并将这两者映射。(“*”在这里的用法和在正则表达式中的相同)

    <servlet-mapping>
        <servlet-name>redteam</servlet-name>
        <url-pattern>/red/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>blueteam</servlet-name>
        <url-pattern>/blue/*</url-pattern>
    </servlet-mapping>

例如:请求http://www.example.com/blue/teamProfile指向的是TeamServlet类,并且teamColor = blue, bgColor = #0000CC。servlet可以通过getPathInfo()来取得该URL中的值,如

String teamColor = getServletConfig().getInitParameter("teamColor");

但是关于静态文件,如对于.js文件的请求,需要通过appengine-web.xml来设置。

JSP

一个应用可以通过JavaServer pages(JSPs)来实现网页。

APP ENGINE允许jsp页面自动生成servlet类。而映射到这个jsp的URL就是从WAR根目录到这个文件的路径。如start.jsp在子目录register/下,App Engine可以将它映射到/register/start.jsp

如果想要对一个jsp文件的映射有详细的描述,可以使用一个来声明,如:

    <servlet>
        <servlet-name>register</servlet-name>
        <jsp-file>/register/start.jsp</jsp-file>
    </servlet>

    <servlet-mapping>
        <servlet-name>register</servlet-name>
        <url-pattern>/register/*</url-pattern>
    </servlet-mapping>

注意:如果jsp文件在WAR的根目录下,在中的值应当为”/”

另外,可以通过来install JSP tag libraries。不过TLD并不需要install,因为App engine已经提供了相关的服务,详见JavaServer Pages Standard Tag Library.

    <taglib>
        <taglib-uri>/escape</taglib-uri>
        <taglib-location>/WEB-INF/escape-tags.tld</taglib-location>
    </taglib>

Security and Authentication

因为之前使用的不是google engine,所以并没有涉及使用google account api 来验证的部分,请有需要的读者移步the Google Accounts API

描述了对于符合某一pattern的URL的约束,如果用户在没有取得访问权限的情况下请求该URL,google app engine会将用户引导至google account sign-in页面,直到用户登陆或者注册,会自动跳转回之前访问的URL。

如:

   <security-constraint>
        <web-resource-collection>
            <web-resource-name>profile</web-resource-name>
           <url-pattern>/profile/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>

    <security-constraint>
        <web-resource-collection>
           <web-resource-name>admin</web-resource-name>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

PS:因为写者并没有使用该部分功能,所以暂时省略了部分。如有读者需要关于该部分的详细内容,请戳Security and Authentication

other sources

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值