Java教程

JavaWeb#(一) Servlet的认识

本文主要是介绍JavaWeb#(一) Servlet的认识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Servlet是什么

一.servlet简介
1.sun公司在API中提供一个接口叫做:Servlet,能够实现网页动态跳转,
2.是一种动态网页技术,也把实现看servlet的接口的程序叫做Servlet.
3.本质上是一个能接收到网页请求(request),然后做出网页反应和实际回复(response)输出的类.依托于HTTP协议进行工作的类.
二.实现思路
编写servlet,在web容器中注册这个servlet及其链接,通过访问链接来执行编写的servlet的工作.
三.实现原理
servlet是一个sun提供的接口其中包含着一个方法(方法能够处理请求和响应);从浏览器提出响应,存入web容器,web容器构建两个对象分别是请求和响应,两者传入servlet中的方法中,对其进行处理,并返回响应内容,web容器继续获得响应然后将其传到浏览器
在servlet接口中我们可以对其中的service方法进行实现,其中调用了doget,dopost方法等等:我们可以对doget,dopost方法进行重写,达到我们修改servlet的作用

Servlet怎么用

以我的第一个servlet为例:
一.构建一个maven项目,然后给其添加web框架支持
(当然也可以构建一个maven项目,并且删除src(java的配置文件),把此工程当作父亲工程,2.在父工程中添加模块(model),添加webapp模块,并为你的模块命名)

二.导入servlet相关的java包依赖

<dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>

    </dependencies>

三.做maven环境优化(web.xml中设置改为最新)
刚建立的普通maven的web项目中的web.xml如下:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

将其修改为:

<?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>

四.在你的项目里编写属于你的servlet
(在src/main/java文件夹中建立servlet类,一般情况是重写doGet方法,或doPost方法来实现请求体和回复体的传递)

public class MyServlet extends HttpServlet {

   //get和post只是请求实现的不同方式但逻辑一样,可以互相调用

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
        System.out.println("调用了此servlet的doget 方法");
        PrintWriter writer = resp.getWriter();//响应流
        writer.println("hello servlet");//让页面输出响应流中的内容
    }

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

五.编写servlet映射,在服务器中注册我们写的servlet,和我们写的servlet程序的路径
(在src/main/webapp/WEB_INF/web.xml文件中添加我们的servlet和对应链接)

<?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">
<!--    注册一个servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.cs.servlet.MyServlet</servlet-class>
    </servlet>
<!--servlet的请求路径,我们注册了多个路径-->
<!--当我们访问这些路径的时候就会执行MyServlet-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello1</url-pattern>   
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>
</web-app>

六.添加tomcat和将项目的war包放入tomcat
tips:maven4代和tomcat10不兼容
操作步骤:

  • 点击run/debug Configuration,添加tomcat支持
  • 配置tomcat设置,访问那一个URL和对应IP和port才能打开网站
  • 在Deloyment下添加war包
    七.启动tomcat,访问网站进行测试

servlet及映射的编写细节

mapping:
1.一个servlet可以指定一个或多个路径
2.万能路径*,指定前后缀
3.指定了固有映射路径的优先级最高,万能路径情况下访问指定路径会进入指定路径

servletContext:
1.web容器在启动时,它会为每一个web程序都创建一个对应的servletContext对象(独立公共对象),它代表当前的web.
2.利用servletContext;实现访问跳转;当浏览器从映射地址A时,A所指对象其中有请求转发的代码块(代码块指向另一样对象的映射地址B),此时访问A如同访问B

servletRespones:
1.web服务器接收到客服端的请求,会创建两个对象分别为HttpServletRequest和HttpServletResponse,作用分别为包含客服端的参数的对象,包含响应给客服端的信息的对象
2.常见应用:
(1).向浏览器输出消息
(2).下载文件
(获取文件路径,下载文件名是什么,让浏览器支持下载我们所需的东西,获取下载文件的输入流,创建缓冲区,获得OutputStream对象,将流写入到buffer,将缓冲区中的数据输出的客户端)
(3).验证码
(4).重定向
servletResquset:
1.代表客服端的请求的对象;HTTP中的请求中的所有信息会被封装到HttpServletRequset对象中.通过此对象的方法,可以获得客服端请求的所有信息.
2.常见应用:
获取前端传过来的参数,给后端处理
req.getParmater(“name”)
req.getParmaterValue(“name”)

这篇关于JavaWeb#(一) Servlet的认识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!