一、以添加数据为例

在add.html页面的表单中,我们输入数据,通过点击添加操作,根据action发给我们服务器端的add组件,这个add组件会用JDBC中添加的方法向数据库中添加数据。

1、add组件

AddServlet

servlet(服务器端的一个应用组件),add指实现添加的功能。

需要完成的事情:

该类需要继承HttpServlet才可以实现以上的工作(在Tomcat的lib文件中的servlet-api.jar)

添加依赖:

点击+,导入我们的servlet-api.jar即可使用

dopost() 会响应我们method=post 的请求

doget()同理

2、HttpServletRequest

当用户在add.html页面中填入数据之后点击添加操作,相当于向我们的服务器端发送了一个请求,

于是将表单里的数据都会存储在这个请求之中,我们可以通过 HttpServletRequest定义的变量来获取。

3、如何将表单上的action和addServlet对应上?

在web.xml文件中配置如下:

<servlet>
    <servlet-name>AddServlet</servlet-name>
    <servlet-class>servlets.AddServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AddServlet</servlet-name>
    <url-pattern>/add</url-pattern>
  </servlet-mapping>

1、用户发请求action=add

2、项目web.xml 文件中找到url-pattern =/add

3、接着找上面的servlet-name

4、找和servlet-mapping中和servlet-name一致的servlet(既第二行的servlet-name :AddServlet)

5、接着就能找到serlvet-class

6、最后根据用户发送的请求的method来找到AddServlet中的与method对应的方法

接下来之后服务器端跟数据库连接即可(FruitDAO是提前写好的)

public class AddServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");

        String fname = req.getParameter("fname");
        String priceStr = req.getParameter("price");
        Integer price = Integer.parseInt(priceStr);
        String fcountStr = req.getParameter("fcount");
        Integer fcount = Integer.parseInt(fcountStr);
        String remark = req.getParameter("remmark");

        FruitDAO fruitDAO = new FruitDAOImpl();
        boolean flag = fruitDAO.addFruit(new Fruit(0,fname, price, fcount, remark));
        System.out.println(flag? "添加成功":"添加失败");
    }
}

在web.xml文件中,若配置多个servlet-name建立连接 会web-app下会出现错误。只需要根据关于servlet中web.xml web-app报错 解决方案_石中玉大帅哥的博客-CSDN博客j

即可解决

2、Servlet的继承关系

javax.servlet.Servlet接口

        javax.servlet.GenericServlet 抽象类

                javax.servlet.http.HttpServlet

2.1 相关方法

 后面的子类都会实现这些方法

init() 初始化方法

service 服务方法:当有请求过来,该方法会被执行(Tomcat容器来调用)

        在genericServlet中也是抽象的方法

        在HttpServlet中会分析请求方式,在决定调用哪个do方法,do方法默认都是405的实现风格(需要我们实现这些请求方法,否则默认报405)

destroy 销毁方法

2.2 service方法

        各种if判断,根据表单中的请求方法来决定调用哪一个do方法(默认为get)

3、Servlet的生命周期

3.1

        也是由Tomcat容器来控制

        默认情况下:

                第一次接受请求时会进行实例化(调用构造方法)[这里调用底层的方法],初始化(init方法)、然后服务调用service,当容器关闭时所有的servlet会被销毁,调用destroy方法。

                *实例化和初始化Tomcat只会创建一次,所有的请求都是使用这个实例来响应。

                

如何实例化对应的serlvet

 当在servlet中自己重写构造方法时候,访问demo02的时候就会出现这样的错误

 意思是说无法初始化这个servlet实例去调用那些init、service方法.......

(因为原本的构造函数里通过java的方法会创建这个实例)。

3.2 Servlet的初始化时机

        -默认是第一次接受请求时候,实例化初始化

        -也可以通过<load-on-startup>来设置启动的先后顺序,数字越小启动越靠前

Servlet在容器中是单例的、线程不安全的

        单例:无论哪个servlet发送请求过来,tomcat容器都只会实例化一个对象,都是使用该对象来调用各个组件的

4、保存作用域

        page :页面级别

        request :一次请求响应的范围

        session :一次会话

        application :一次应用程序

 

补充

servlet3.0之后支持注解

因此在web.xml中不需要一个一个去注册组件

只需要增加对应的注解即可

路径问题

../ 回到上级

 在login.html中 如何连接css样式中的login.css

答: ../css/login.css  相对路径的写法

当主体是shopping.html,如何连接css样式中的login.css

答:../../css/login.css  相对路径的写法

JavaWeb网页的错误代码:

404:找不到对应资源

405:一般是表单提交的方法在组件里面不存在这个方法的重写,比如表单的提交方式为get, 在servlet组件中就需要有一个doget()方法,如果没有就调用原本的doget方法,就会报405

500:服务器端的错误

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐