Servlet一篇能搞定

一、概念:

  • Servlet是JavaWeb的三大组件之一。三大组件是:Servlet程序,Filter过滤器,Listenter监听器
  • 可以把servlet称为web应用中的控制器,能处理客户端请求并作出响应的一套技术标准就是servlet。
  • Tomcat内部封装了servlet,也就是servlet接口并不是JDK自带的接口,而是Tomcat里jar包提供的api,所以添加maven中无需添加依赖。

二、servlet开发:

2.1. 新建项目,添加依赖

转换为web项目后,配置好Tomcat的依赖:这步骤需要先做,不然后先新建类无法使用servlet相关api。

2.2. 新建一个类,并新建一个index.html,内容随意

继承HttpServlet类,重写service方法;或者实现Servlet接口,重写service方法,由于我们只关注service方法,所以采用继承的方式。

index.html的内容可以如下:

2.3. 配置Tomcat启动器

启动后默认访问蓝色点的web包下的index.html,如果启动后显示404无法找到资源,编译文件中也没有资源,则需要进行如下设置

2.4.web.xml配置文件

作用:该配置文件可用@webservlet替代,xml配置目的用于将请求路径和java类做关联,请求可以通过后端代码,也就是Tomcat。

问题:service方法为一个实例方法,Tomcat会自动调用service方法,拿Tomcat是如何找到该方法的呢?

回答:通过配置xml中的全路径即可,也就是字节码的位置,再通过反射调用这个service方法。

<!--
<servlet-name>该标签是起别名的作用,为<servlet-mapping>标签找到对应的<servlet>
<servlet-class>为Tomcat找到该类的位置
<url-pattern>处理哪种路径可经过UserServlet这个类
-->
<servlet>    
<servlet-name>userServlet</servlet-name>    
<servlet-class>com.samcode.servlet.UserServlet</servlet-class>
</servlet>

<servlet-mapping>    
<servlet-name>userServlet</servlet-name>    
<url-pattern>/user</url-pattern>
</servlet-mapping>

2.5. UserServlet类可以简化为下面这种写法,无需配置web.xml文件

@WebServlet("/user")
public class UserServlet extends HttpServlet {

    @Override    
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        String username = req.getParameter("username");        
        if (username.equalsIgnoreCase("abc")) {
            resp.getWriter().println("Welcome " + username);        
            }
            //转发至jsp页面
        RequestDispatcher dispatcher = req.getRequestDispatcher("/index.jsp");        
        dispatcher.forward(req, resp);    
        }
}

2.6. 最终效果图

2.7. 访问流程

三、servlet一些重要的api

3.1. servletContext

  • servletContext是最大的域对象,可以为所有的servlet提供配置参数
  • servletContext还可以为查询项目中的一些路径。

3.1.1. servletContext配置相关:

例如web.xml有如下配置

<context-param>    
<param-name>driver</param-name>    
<param-value>com.mysql.jdbc.Driver</param-value></context-param>

继承HttpServlet,可以调用其父类的方法getServletContext

@WebServlet("/user")
public class UserServlet extends HttpServlet {

    @Override    
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        ServletContext servletContext = super.getServletContext();        
        String driver = servletContext.getInitParameter("driver");
        System.out.println(driver);   
        // 结果为:com.mysql.jdbc.Driver
        }
}

3.1.2. servletContext路径相关:

四、servlet的生命周期

1.执行Servlet构造方法

2.执行init初始化方法,第一次访问时初始化

3.执行service方法(每次请求都会调用)

4.执行destroy销毁方法

某一个类实现servlet接口,重写即可有上述四个方法

五、Servlet相关的类

5.1.Servlet接口中,有子接口HttpServletRequest,子类中可以获取请求方式

5.2.继承HttpServlet,重写方法

5.3.HttpServletRequest类

5.3.1.概念:

只要有请求进入Tomcar服务器,Tomcat服务器就会把Http请求协议解析到request对象中,然后传递到Service方法(doGet 和 doPost中)

常用方法:

5.3.2.转发对象,设置域数据

使用setAttribute可以在请求中设置数据,再用getArrtibute获取,设置的域数据在使用转发

5.3.3. servlet1转发到servlet2

5.3.4.乱码问题

在doPost方法中,如果传入的参数中带有中文,则会出现乱码,可以使用rep.setCharacterEncoding("utf-8")解决乱码。

api说明中可以看到是请求体中的参数

5.4.HttpServletResponse类

5.4.1. 只要有请求进入Tomcar服务器,Tomcat服务器就会创建一个response对象传递给Servlet程序去使用。HttpServlet Response表示所有响应信息。

5.4.2. 字节流 getOutputStream(); 常用于下载(二进制文件)

5.4.3. 字符流 getWreter(); 常用于回传字符串

在响应中不可同时使用字节和字符流。

六.Servlet继承体系

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值