Servlet简介
- Servlet是sun公司开发动态web的一门技术
 - Sun在这些API中提供一个接口叫做:Servlet,如果想开发一个Servlet程序,需要
 
-  
  
- 编写一个类,实现Servlet接口
 - 把开发好的Java类部署到web服务器中
 
 
- 把实现了Servlet接口的Java程序叫做:Servlet
 
HelloServlet
Servlet接口Sun公司有两个默认的实现类:HttpServlet、GenericServlet
1、 关于Maven父子工程的理解
父项目中会有
	<modules>
        <module>servlet-01</module>
    </modules> 
子项目中会有
<parent>
  <artifactId>javaweb-02-servlet</artifactId>
  groupId>com.wangsiqi</groupId>
  <version>1.0-SNAPSHOT</version>
</parent> 
父项目中的jar子项目可以直接使用
son extends father 
2、Maven环境优化
- 修改web.xml为最新的
 - 讲Maven的结构搭建完整
 
3、编写一个Servlet程序
- 编写一个普通类
 - 实现Servlet接口,这里默认继承HttpServlet
 
package com.wangsiqi.servlet;
import javax.annotation.Generated;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloServlet extends HttpServlet {
	//    由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
		//        super.doGet(req,resp);
		PrintWriter writer = resp.getWriter();//响应流
		writer.println("Hello,Servlet");
	}
	
	@Override
	protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
		super.doPost(req,resp);
	}
} 
4、编写Servlet的映射
为什么需要映射?
我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中,注册我们写的Servlet,还需一个浏览器能够访问
<!--注册Servlet-->
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.wangsiqi.servlet.HelloServlet</servlet-class>
  </servlet>
<!--Servlet的请求路径-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping> 
5、配置Tomcat
注意:项目启动的路径
Servlet原理
Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会:

Mapping问题
可以自定义后缀实现请求映射
PS:*前面不能加项目映射的路径
1、一个Servlet可以指定一个映射路径
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello</url-pattern>
 </servlet-mapping> 
2、一个Servlet可以指定多个映射路径
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello2</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello3</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello4</url-pattern>
  </servlet-mapping> 
3、一个Servlet可以指定通用映射路径
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello/*</url-pattern>
  </servlet-mapping> 
4、默认请求路径
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping> 
5、指定一些后缀或者前缀等等......
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>*.com</url-pattern>
  </servlet-mapping> 
6、优先级 问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求:
<!--404-->
<!--注册Servlet-->
  <servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.wangsiqi.servlet.HelloServlet</servlet-class>
  </servlet>
<!--Servlet的请求路径-->
  <servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping> 
ServlertContext
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用。



















