Myeclipse关于Servlet项目文件的组织方面,如下:

WEB-INF:这个目录名称和位置是固定的,放置在该目录下的文件或目录,对外界来说的封闭的,也就是客户端无法用http的任何方式访问到其中的文件。如有这类需求,则必须通过Servlet/jsp的请求转发(Forward)。可用于保存资源。

web.xml:这是web应用程序部署描述文件,位置和名称固定。

lib:放置JAR文件,位置和名称固定。

classes:放置编译后的类文件

Servlet部署方面:

URL模式的设置,一个请求URI实际上是由三部分组成:

requestURI = contextPath + servletPath + pathInfo;

可以使用httpServletRequest的getRequestURI()来取得这项信息

首先,环境路径contextPath,是容器用来决定挑选哪个Web应用程序的依据,可以使用httpServletRequest的getContextPath()来获得,环境路径一般以"/"开头,若应用程序环境路径与Web服务器环境跟路径相同,则应用程序环境路径为空字符串。

一旦决定Web服务程序,接下来就进行Servlet的挑选,Servlet必须设置URL模式(url-pattern),三种设置方法,例如:/admin/login.do,/admin/*与*.do三个url模式设置,请求对比的原则是最严格的匹配优先原则。

其次,requestURI中的servletPath是Servlet路径,不包括路径信息和和请求参数,Servlet路径直接对应URL模式信息,可以使用httpServletRequest的getServletPath()获取,基本是以"/"开头,但在"/*"与""的情况下,Servlet的值为空字符串。

例如:某个请求是根据/hello.do对应至某个Servlet,则getServletPath()取得的Servlet路径就是/hello.do,如果是通过/servlet/*对应的,则取得的Servlet路径就是/servlet。

再次,requestURI中的pathInfo是路径信息,指的是不包括环境路径和Servlet路径的额外路径信息,通过httpServletRequest的getPathInfo()获取,若为类似*.do、预设Servlet或完全匹配的情况下,getPathInfo()得到的是null。

@WebServlet("/servlet/*")
public class HelloServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {

    response.setContentType("text/html");

    PrintWriter out = response.getWriter();

    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

    out.println("<HTML>");

    out.println("<HEAD><TITLE>A Servlet</TITLE></HEAD>");

    out.println("<BODY>");

    out.print(request.getRequestURI()+"<br/>");

    out.print(request.getContextPath()+"<br/>");

    out.print(request.getServletPath()+"<br/>");

    out.print(request.getPathInfo()+"<br/>");

    out.println("  </BODY>");

    out.println("</HTML>");

    out.flush();

    out.close();

  }

}

另外,若将wen.xml中<web-app>的metadata-complete属性设置为true(默认是false),则部署时将不再扫描标注与web-fragment.xml中的定义,如果有<absolute-ordering>与<ordering>也会被忽略

servlet笔记1的更多相关文章

  1. servlet 笔记

    Servlet的作用是接收浏览器传给服务端的请求(request),并将服务端处理完的响应(response)返回给用户的浏览器,浏览器和服务端之间通过http协议进行沟通,其过程是浏览器根据用户的选 ...

  2. servlet笔记

    开发servlet有三种方法: (1)    实现 Servlet接口 (2)    通过继承 GenericServlet (3)    通过继承 HttpServlet get提交和post提交的 ...

  3. servlet笔记,配置与 http相关

    tomcat配置环境变量:        JAVA_HOME= 指向你的jdk的主目录(bin目录的上一层) server.xml: <Context path="/myweb2&qu ...

  4. Servlet 笔记-Session 跟踪

    HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录. 但是仍然有以下三种方式来维持 ...

  5. Servlet 笔记-Cookie 处理

    Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息. 识别返回用户包括三个步骤: 服务器脚本向浏览器发送一组 Cookie.例如:姓名.年龄或识别号码等. 浏览器将这些信息存储在本地 ...

  6. Servlet 笔记-异常处理

    当一个 Servlet 抛出一个异常时,Web 容器在使用了 exception-type 元素的 web.xml 中搜索与抛出异常类型相匹配的配置. 必须在 web.xml 中使用 error-pa ...

  7. Servlet 笔记-过滤器

    Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet.Servlet 过滤 ...

  8. Servlet 笔记-读取表单数据

    Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析: getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值. get ...

  9. Servlet 笔记-servlet实例

    Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类.Web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.h ...

  10. Servlet 笔记-生命周期

    Servlet 生命周期可被定义为从创建直到毁灭的整个过程.以下是 Servlet 遵循的过程: Servlet 通过调用 init () 方法进行初始化. Servlet 调用 service()  ...

随机推荐

  1. Vue.js的类Class 与属性 Style如何绑定

    Vue.js的类Class 与属性 Style如何绑定 一.总结 一句话总结:数据绑定一个常见需求是操作元素的 class 列表和它的内联样式.因为它们都是属性,我们可以用 v-bind 处理它们:我 ...

  2. bzoj1044: [HAOI2008]木棍分割 二分+dp

    有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且输出有多少 ...

  3. Coderforce-574C Bear and Poker(素数唯一分解定理)

    题目大意:给出n个数,问能不能通过让所有的数都乘以2的任意幂或乘以3的任意幂,使这n个数全都相等. 题目分析:最终n个数都是相等的,假设那个数为x,根据素数唯一分解定理,x能分解成m*2p3q.所以, ...

  4. Integer与int的种种比较你知道多少

    如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null. 但是如果面试官再问一下Integer i = 1 ...

  5. Java9新特性

    转载:http://blog.csdn.net/qq_32524177/article/details/77014757 写在前面的话:Java9来了,搜索了很多关于Java9的新特性,但文献不多,特 ...

  6. hdu 3682 10 杭州 现场 C - To Be an Dream Architect 简单容斥 难度:1

    C - To Be an Dream Architect Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &a ...

  7. Visual Studio 后期生成事件命令行

    set "str=$(ConfigurationName)" if "%str%"=="Release" (xcopy /y/e $(Tar ...

  8. Redis学习笔记-事务控制篇(Centos7)

    一.事务控制 1.简单事务控制 redis可以使用mult命令将之后的命令都存放在队列中,只有使用exec命令时才全部执行. 127.0.0.1:6379> multi OK 127.0.0.1 ...

  9. FastAdmin 是如何利用 Git 管理插件代码的?

    FastAdmin 是如何利用 Git 管理插件代码的? 由于 FastAdmin 的插件很多,如果每一个插件用一个项目来管理,可以倒是可以,但是项目还多了. 但是如果使用文件夹在同一级的的方式又不方 ...

  10. Pacemaker+Corosync搭建PostgreSQL集群

    https://my.oschina.net/aven92/blog/518928 · PostgreSQL中国社区: http://postgres.cn/index.php/home · Post ...