javaweb基础:servlet(简单明了)

1.简介

1.1Servlet是sun公司开发动态web的一门技术

1.2Sun在这些API中提供一个接口叫做:Servlet,如果想开发一个Servlet程序,只需要完成两个小步骤:

    编写一个类,实现Servlet接口

    把开发好的java类部署到web服务器中

把实现Servlet接口的java程序叫做,Servlet

 

**1.3Servlet接口在sun公司有两个默认的是实现类:HttpServlet

2.HwlloServlet(具体实现)

  2.1 构建一个普通的Maven项目,删掉里面的src目录,以后学习就在这个项目里建立Moudel;这个工程就是Maven主工程;

  2.2关于Maven父子工程的理解:

  父项目中会有

    <modules>
        <module>servlet-01</module>
    </modules>

  子项目中有

  <parent>
    <artifactId>javaweb-02-servlet</artifactId>
    <groupId>com.king</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  父项目中的java,子项目可以直接使用

  son extends father

3. Maven环境优化

3.1修改web.xml为最新的

<?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">
  <!--替换为web4.0版本,和tomcat版本一致-->

</web-app>

3.2将maven的结构搭建完整

4.编写一个servlet程序

题:为什么一doPost方式提交,但以doGet方式写

答:1.由于daGet方法提交的不安全(因为提交的数据会在url栏明文显示,eg:暴露username,password);

  2.两者可以相互调用;(具体可百度搜doGet和doPost区别)

 

  4.1编写一个普通类

  4.2实现servlet接口,这里直接基础HttpServlet

public class HelloServlet extends HttpServlet {

    //由于get和post只是请求实现的不同方式,可以相互调用,业务逻辑都一样
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer= resp.getWriter();//响应流 writer.print("Hello,Servlet"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

 4.3编写Servlet的映射

  为什么需要映射:编写的是java程序,但是要通过浏览器访问,而浏览器需要链接web服务器,所以我们要在web服务中注册我们写的servlet,还需给他一个浏览器能够访问的路径;

 <!--注册servlet-->
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.king.servlet.HelloServlet</servlet-class>
  </servlet>
<!--Servlet的请求路径--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>

4.4配置tomcat-->启动测试

 

5,Servlet运行原理

  Servlet是由web服务器调用,web服务器在收到浏览器请求之后,会

  

 

 

6.Mapping问题

  6.1一个Servlet可以指定一个映射路径

  <!--Servlet的请求路径-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

  6.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>/hello02</url-pattern>
  </servlet-mapping>  <servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello03</url-pattern>
</servlet-mapping>

  6.3一个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>

 

  6.4指定一些后缀或者前缀等等....

注意:可以自定义后缀实现请求映射,但*前面不能加项目映射的路径 
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>*.king</url-pattern> </servlet-mapping>

   6.5优先级问题

    指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求

ErrorServlet实体类

public class ErrorServlet extends HttpServlet {
    @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("<h1>404</h1>");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doGet(req, resp);
    }
}

web.xml配置

  <!--404-->
  <!--404(本质走到默认请求路径)-->
  <servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.king.servlet.ErrorServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

 

posted @ 2020-10-03 20:26  凸然猿  阅读(432)  评论(0编辑  收藏  举报