Servlet知识总结(1~4)
Servlet知识总结
1.Servlet简介
- Servlet就是sun公司开发的动态web的一项技术
- Sun公司在这些API中提供一个借口叫:Servlet,如果你想开发一个Servlet程序,只需要完成以下两个步骤即可:
- 编写一个类,实现Servlet接口
- 把开发好的Java类部署到服务器中
我们把实现了Servlet接口的Java程序叫做Servlet
2.HelloServlet
Servlet接口有两个默认的实现类:HttpServlet和GenericServlet
下面用一个例子说明如何写一个最简单的HelloServlet
-
构建一个普通的Maven项目,将src目录删掉,作为我们的Maven主工程
-
关于Maven父子工程的理解
当我们建立一个子项目时,父项目的pom.xml文件中会生成一个
,如 <modules> <module>servlet-01</module> </modules>相应的,子项目中会生成
,如 <parent> <artifactId>javaweb-02-servlet</artifactId> <groupId>com.shida</groupId> <version>1.0-SNAPSHOT</version> </parent>
特别要注意的是,对于新手来说,建立父项目时记得删掉父项目pom.xml中的
如此一来,父项目中的java子项目可以直接使用
3.Maven环境优化
-
将web.xml修改成最新的(最好使用Tomcat默认的)
<?xml version="1.0" encoding="UTF-8"?> <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" metadata-complete="true"> </web-app>本人习惯于在主工程下建立一个file文件保存该信息,复用起来比较方便

- 将Maven的结构搭建完整(包括Java文件夹和resources文件夹)

4.编写一个Servlet程序
通过查看源码我们发现Servlet接口中有着名为service的抽象方法

GenericServlet实现了这个接口,但并未重写service方法

而是由HttpServlet继承GenericServlet重写service方法

所以我们自己写的类若继承了HttpServlet,我们就只需要重写父类中service方法中被调用的方法即可,如doGet()和doPost()等。
综上,我们编写一个Servlet程序的步骤应该是
-
编写一个普通类
-
实现Servlet接口,这里我们选择继承HttpServlet
public class Helloservlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("ujdfgff"); PrintWriter writer = resp.getWriter(); writer.print("hellogfgffgfg"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }5.编写Servlet映射
首先我们要明白一件事情,即:为什么需要映射?
归根到底,我们写的是Java程序,但是需要通过浏览器来访问,而浏览器进行访问需连接web服务器,所以我们需要在web服务中注册我们写的Servlet,给一个浏览器能够访问的路径
<!--注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.shida.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
6.配置Tomcat
这里只需稍注意一下配置artifacts中项目发布的路径即可
7.启动测试
3.Servlet原理
Servlet由web服务器调用,过程如下
- web服务器收到浏览器发送的Http请求
- web生成Request和Response对象,Request对象从service拿到请求,并将得到的响应交给Response
- web服务器读取Response的响应信息(web服务器首次访问会生成servlet的class文件)
- web服务器将信息响应给客户端
所以我们自己编写的实现类主要做的有两件事
- 接收并处理请求
- 给出响应的信息
4.Mapping问题
-
一个Servlet可以指定一个映射路径
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> -
一个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> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello5</url-pattern> </servlet-mapping> -
一个Servlet可以指定通用映射路径
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> -
默认请求路径
<!--默认请求路径--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> -
指定一些前缀或者后缀等
<!--可以自定义后缀实现请求映射 注意点,*前面不能加项目映射的路径 hello/sajdlkajda.shida --> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>*.shida</url-pattern> </servlet-mapping> -
优先级问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求

浙公网安备 33010602011771号