Servlet编程:(1)如何使用Servlet

  1. 如何开发一个Servlet
  2. Servlet的映射路径
  3. Servlet缺省路径
  4. Sevlet的生命周期
  5. Servlet的自动加载
  6. 有参的init方法和无参的init方法
  7. Servlet的多线程并发问题
  8. ServletConfig对象
  9. ServletContext对象

1、如何开发一个Servlet

步骤:

1)编写java类,继承自javax.servlet.http.HttpServlet类

2)覆写doGet和doPost方法

3)Servlet程序交给tomcat服务器运行!!

3.1)将Servlet程序的class字节码文件拷贝到WEB-INF/classes目录

3.2)在web.xml文件中进行配置

示例:MyFirstServlet.java

package com.rk.http.a_howtouse;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyFirstServlet extends HttpServlet
{
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		response.getWriter().write("this is my first Servelt");
	}
}

示例:web.xml中配置Servlet的部分

  <!-- 配置一个servlet -->
  <servlet> <!-- servlet的配置 -->
  	<servlet-name>MyFirstServelet</servlet-name><!-- servlet的内部名称,自定义。尽量有意义 -->
  	<servlet-class>com.rk.http.a_howtouse.MyFirstServlet</servlet-class><!-- servlet的类全名: 包名+简单类名 -->
  </servlet>
  <servlet-mapping><!-- servlet的映射配置 -->
  	<servlet-name>MyFirstServelet</servlet-name><!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
  	<url-pattern>/first</url-pattern><!-- servlet的映射路径(访问servlet的名称) -->
  </servlet-mapping>

示例:完整的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  
  <!-- 配置一个servlet -->
  <servlet> <!-- servlet的配置 -->
  	<servlet-name>MyFirstServelet</servlet-name><!-- servlet的内部名称,自定义。尽量有意义 -->
  	<servlet-class>com.rk.http.a_howtouse.MyFirstServlet</servlet-class><!-- servlet的类全名: 包名+简单类名 -->
  </servlet>
  <servlet-mapping><!-- servlet的映射配置 -->
  	<servlet-name>MyFirstServelet</servlet-name><!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
  	<url-pattern>/first</url-pattern><!-- servlet的映射路径(访问servlet的名称) -->
  </servlet-mapping>
</web-app>

问题:如何根据URL(“http://localhost:8080/myweb/first”)找到资源的?

通过URL寻找资源的过程
URL组成部分 作用
(前提) tomcat服务器启动时,首先加载webapps中的每个web应用的web.xml配置文件。
http:// http协议。浏览器遵循HTTP协议发送(Request)请求数据
localhost 到本地的hosts文件中查找是否存在该域名对应的IP地址,得到127.0.0.1
8080 找到tomcat服务器
/myweb 在tomcat的webapps目录下找myweb的目录
/first
资源名称。

1)在myweb的web.xml中查找是否有匹配的url-pattern的内容(/first)

2)如果找到匹配的url-pattern,则使用当前servlet-name的名称到web.xml文件中查询是否相同名称的servlet配置

3)如果找到,则取出对应的servlet配置信息中的servlet-class内容:

字符串:com.rk.http.a_howtouse.MyFirstServlet

通过反射:

a)构造MyFirstServlet的对象

b)然后调用MyFirstServlet里面的方法

2、Servlet的映射路径

  <servlet-mapping>
  	<servlet-name>MyFirstServelet</servlet-name>
  	<url-pattern>/first</url-pattern><!-- 本节讨论对象 -->
  </servlet-mapping>
Servlet映射路径的精确匹配和模糊匹配
类别 url-pattern 浏览器输入
精确匹配 /first http://localhost:8080/myweb/first
/rk/first http://localhost:8080/myweb/rk/first
模糊匹配 /* http://localhost:8080/myweb/任意路径
/rk/* http://localhost:8080/myweb/rk/任意路径

*.后缀名

*.do

*.action

*.html(伪静态)

http://localhost:8080/myweb/任意路径.do

注意事项:

1)url-pattern要么以 / 开头,要么以*开头。  例如,直接写“rk”(前面没有“/”线)是非法路径。

2)不能同时使用两种模糊匹配,例如 /rk/*.do是非法路径,它由rk/*和*.do两种模糊匹配组合而成。

3)当有输入的URL有多个servlet同时被匹配的情况下:(冲突处理)

3.1)精确匹配优先。(长的最像的,优先被匹配)

3.2)以后缀名结尾的模糊url-pattern优先级最低!!!

3、Servlet缺省路径

在%tomcat%/conf/web.xml中,有以下一段XML代码:

    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

Servlet的缺省路径(/)是在tomcat服务器内置的一个路径。该路径对应的是一个DefaultServlet(缺省Servlet)。这个缺省的Servlet的作用是用于解析web应用的静态资源文件。

问题: URL输入http://localhost:8080/myweb/index.html 是如何读取文件的?

1)到当前myweb应用下的web.xml文件查找是否有匹配的url-pattern。

2)如果没有匹配的url-pattern,则交给tomcat的内置的DefaultServlet处理

3)DefaultServlet程序到myweb应用的根目录下查找是否存在一个名称为index.html的静态文件。

4)如果找到该文件,则读取该文件内容,返回给浏览器。

5)如果找不到该文件,则返回404错误页面。

结论: 先找动态资源,再找静态资源。

时间: 2024-10-13 02:06:37

Servlet编程:(1)如何使用Servlet的相关文章

JSP(4) ----servlet 编程1

Servlet Servlet是很多框架的技术基础 Servlet是特殊的java类,没有main方法,运行于服务端,创建和销毁都由Servlet容器管理 Servlet容器值tomcat. Servlet与http紧密联系,Servlet可以处理几乎所有http相关的内容 简单的Servlet程序,输出hello 添加Servlet类: package com.jike.servlet; import java.io.IOException; import java.io.PrintWrite

Servlet学习(三)Servlet编程实例-网站登录(修改版-增加数据库-附源码)

我们为刚才的那个示例Servlet学习(二)Servlet编程实例-网站登录添加上数据库,组成一个较为完整的登录功能. 在开始之前我们得首先了解下一些常用的java术语: PO(persistant object) 持久对象 在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了. 通常对应数据模型(数据库),本身还有部分业务逻辑的处理. 可以看成是与数据库中的表相映射的java对象. 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合. PO中应该不包含

Servlet编程-验证码示例

Servlet编程基本思想我上一篇文章已经说过,这里就不多说了,给大家分享一个用Servlet实现验证码验证的示例. 首先我们需要一个Servlet类:ImageServlet.java来产生验证码并将验证码存放到Session中 接下来,我们需要配置web.xml文件添加Servlet 好,现在我们写一个登录页面,就可以实现验证码的显示了login.jsp 最后,我们只需要验证Session中的验证码和用户提交的验证码是否一致,再建一个login_check.jsp来验证验证码. 现在,一个完

Servlet编程:(5)ServletContext

如何开发一个Servlet Servlet的映射路径 Servlet缺省路径 Sevlet的生命周期 Servlet的自动加载 有参的init方法和无参的init方法 Servlet的多线程并发问题 ServletConfig对象 ServletContext对象 Servlet学习 序号 对象 作用 1 HttpServletRequest请求对象 获取请求信息 2 HttpServletResponse响应对象 设置响应对象 3 ServletConfig对象 servlet配置对象 4 S

Servlet编程总结 1

Servlet对象的生命周期是由Servlet容器控制的. Servlet的生命周期中的各方法的调用代码表示: 1 package cn.servlet.life; 2 import java.io.IOException; 3 4 import javax.servlet.ServletConfig; 5 import javax.servlet.ServletException; 6 import javax.servlet.ServletRequest; 7 import javax.se

Servlet编程实例 续4

---------------siwuxie095 JSP+Servlet+JDBC 继续完善登录实例,将校验逻辑改为:从数据库中获取用户信息进行校验 数据库准备 在 Navicat for MySQL 中创建连接:user_conn,创建数据库:user_db, 创建表:user,并内置数据: JDBC 驱动准备 下载 MySQL 的 JDBC 驱动,下载链接: https://dev.mysql.com/downloads/connector/j/ mysql-connector-java-

Servlet编程

软件152 罗杰 1. Servlet概念:Servlet是一种JavaEE的web组件,以Java类的形式存放,以Web形式 读取.继承了HttpServlet类 2. 引入的包:java.io.*;javax.servlet.*;javax.servlet.http.* 3. Servlet配置:在WEB-INF下得web.xml文件下 a) 声明Servlet: <servlet>    <servlet-name>类名</servlet-name><!-声

Servlet编程:(2)Servlet的生命周期

如何开发一个Servlet Servlet的映射路径 Servlet缺省路径 Sevlet的生命周期 Servlet的自动加载 有参的init方法和无参的init方法 Servlet的多线程并发问题 ServletConfig对象 ServletContext对象 4.Servlet的生命周期 4.1.引入 Servlet的生命周期涉及3个问题: servlet类对象什么时候创建,什么时候调用什么方法,什么时候销毁. 以前的对象,其生命周期由程序开发者编写决定,例如: Student stu =

Servlet编程:(3)Servlet的小知识点

如何开发一个Servlet Servlet的映射路径 Servlet缺省路径 Sevlet的生命周期 Servlet的自动加载 有参的init方法和无参的init方法 Servlet的多线程并发问题 ServletConfig对象 ServletContext对象 5.Servlet的自动加载 默认情况下,第一次访问servlet的时候创建servlet对象.    如果servlet的构造方法或init方法中执行了比较多的逻辑代码,那么就会导致用户第一次访问sevrlet的时候比较慢. 解决方