JavaWebServlet

Posted 王思琪^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWebServlet相关的知识,希望对你有一定的参考价值。

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环境优化

  1. 修改web.xml为最新的
  2. 讲Maven的结构搭建完整

3、编写一个Servlet程序

  1. 编写一个普通类
  2. 实现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应用。

以上是关于JavaWebServlet的主要内容,如果未能解决你的问题,请参考以下文章

JavaWebServlet-1

JavaWebServlet

JavaWebServlet-2

JavaWebServlet中的request与response

JavaWebServlet中的ServletConfig与ServletContext

JavaWebServlet3.0(了解)