Servlet接口在sun公司有两个默认的实现类:HttpServlet 、GenericServlet
Servlet就是sun公司开发动态web的一门技术
sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:
把实现了Servlet接口的java程序叫做,Servlet
1、构建一个普通的Maven项目,删掉里面的src目录,之后的Javaweb项目就在这个项目建立Module,这个空的工程就是Maven的主工程。在主工程的pom.xml文件中导入依赖,所有的子项目都适用。
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
<scope>providedscope>
dependency>
2、关于Maven父子工程的理解:
父项目中会有
<modules>
<module>servlet-01module>
modules>
子项目中会有
<parent>
<artifactId>javaweb-02-servletartifactId>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
parent>
父项目中的jar包子项目可以直接使用
son extends father
3、Maven环境优化
web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
web-app >
4、编写一个Servlet程序
5、编写Servlet的映射
为什么需要映射?
我们写的是Java程序,但是要通过浏览器访问,而浏览器需 要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径;
<servlet>
<servlet-name>helloservlet-name>
<servlet-class>com.Lulu.servlet.HelloServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>helloservlet-name>
<url-pattern>/Luluurl-pattern>
servlet-mapping>
6、配置Tomcat
配置项目发布的路径即可
7、启动测试
出现堵塞,网页一直跳不出来
犯了一个低级错误,web.xml中Servlet的请求路径忘了一个“/”,这样就搜索不到页面,会一直堵塞啦!
Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会经历如下阶段:
1、一个Servlet可以指定一个映射路径
<servlet-mapping>
<servlet-name>helloservlet-name>
<url-pattern>/Luluurl-pattern>
servlet-mapping>
2、一个Servlet可以指定多个映射路径
<servlet-mapping>
<servlet-name>helloservlet-name>
<url-pattern>/Lulu1url-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>helloservlet-name>
<url-pattern>/Lulu2url-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>helloservlet-name>
<url-pattern>/Lulu3url-pattern>
servlet-mapping>
3、一个Servlet可以指定通用映射路径
<servlet-mapping>
<servlet-name>helloservlet-name>
<url-pattern>/Lulu/*url-pattern>
servlet-mapping>
4、指定默认路径
<servlet-mapping>
<servlet-name>helloservlet-name>
<url-pattern>/*url-pattern>
servlet-mapping>
5、指定一些后缀或者前缀等等…
<servlet-mapping>
<servlet-name>helloservlet-name>
<url-pattern>*.Luluurl-pattern>
servlet-mapping>
6、优先级问题
指定了固有的映射路径,优先级最高,如果找不到就会走默认的请求(/*)
package com.Lulu.servlet;
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 ErrorServlet extends HttpServlet {
/*自定义404页面*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.print("404
");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>errorservlet-name>
<servlet-class>com.Lulu.servlet.ErrorServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>errorservlet-name>
<url-pattern>/*url-pattern>
servlet-mapping>