Hello Servlet

本文围绕Servlet展开,介绍了其继承体系,阐述开发Servlet程序需创建项目、编写代码并部署到Tomcat。讲解了Servlet代码实现及service()、doGet()/doPost()方法区别。还说明了web.xml配置文件在不同规范下的作用,以及使用注解配置的优势和注意事项,此外提及web.xml的其他配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Servlet继承体系
------|Servlet   接口
-------------| GenericServlet  类,已经实现了Servlet接口
-------------| HttpServlet  如果是get的请求方式调用doGet(),如果是post的请求方式调用doPost()

二、开发Servlet程序

Servlet 本身不能独立运行,需要在一个web应用中运行,而一个web应用是部署在Web服务器上的,常用的Web服务器有:Tomcat、Jboss等。

开发一个servlet:
1、创建web应用项目
2、编写servlet代码
3、部署到tomcat中


三、Servlet代码

1. 实现Servlet接口

public class HelloServlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    /*
        request: 代表了用户的请求信息,用户提交的所有数据都会被封装到request对象中
        response: 代表了服务器给浏览器的响应信息
     */
    @Override
    public void service(ServletRequest request, ServletResponse response) 
    								throws ServletException, IOException {
        //解决向浏览器输出中文乱码问题
        response.setContentType("text/html;charset=utf-8");

        //向浏览器输出数据,应该使用response对象,浏览器与服务器的通讯是基于io流通讯
        PrintWriter out =  response.getWriter();
        out.write("Hello Servlet");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
    }
}

2. Service() doGet()/ doPost()

HttpServlet 里的三个方法:service(HttpServletRequest req, HttpServletResponse resp), doGet(HttpServletRequest req, HttpServletResponse resp), doPost(HttpServletRequest req, HttpServletResponse res) 的区别和联系:

service() 在javax.servlet.Servlet接口中定义,在javax.servlet.GenericServlet中实现,而 doGet()/doPost() 则是在 javax.servlet.http.HttpServlet 中实现的,javax.servlet.http.HttpServletjavax.servlet.GenericServlet 的子类。所以可以这样理解,其实所有的请求均先由 service() 进行处理,在 javax.servlet.http.HttpServlet 的 service 方法中,主要做的事情就是判断请求类型是 Get 还是 Post,然后调用对应的 doGet()/doPost() 执行;但是如果你重载了service方法,默认操作被覆盖,不再进行转发操作!


四、web.xml 配置文件

Servlet2.5 规范之前,Java Web应用的绝大部分组件都通过web.xml文件来配置管理,而 Servlet3.0 规范可通过Annotation来配置管理Web组件,因此web.xml文件可以变得更加简洁,这也是Servlet3.0的重要简化。

1. 通过web.xml

	<servlet>
		<servlet-name>HelloServlet</servlet-name>   //Servlet名字
		<servlet-class>com.zz.HelloServlet</servlet-class>  //Servlet 具体实现类路径
		<!-- 通过servletConfig getInitParameter()取出参数 -->
	</servlet>
	<servlet-mapping>  //地址映射
		<servlet-name>HelloServlet</servlet-name>     //Servlet 名字
		<url-pattern>/hello</url-pattern>        //URL,访问servlet的url链接
	</servlet-mapping> 

配置上述路径时,<servlet-name>HelloServlet</servlet-name>中的命名不一定要和HelloServlet.java的命名一样,web.xml中配置只是一个名字,我们只要保证具体的<servlet-class>com.zz.HelloServlet</servlet-class> 正确,就可以找到相应的Servlet


2. 使用@WebServlet 注解

Servlet3.0 相较于 Servlet2.5:新增了一些注解,简化了 JavaWeb 代码开发,可以省略 web.xml 配置文件,支持异步处理(多线程技术),支持可插性(书写的代码编译后生成的class文件可以直接部署到其他项目并自动加载执行)等。

@WebServlet(urlPatterns="/hello")
public class HelloServlet extends HttpServlet 

@WebServlet支持的常用属性:displayName,initParams,loadOnStartup,name,urlPatterns/value,asyncSupported

使用Annotation来配置Servlet需要注意:

1)不要在web.xml文件的根元素(<web-app>)中指定metadata-complete="true"
2)不要在web.xml文件中配置该Servlet。


3. 通过web.xml如何找到Servlet

1)输入网址 http://localhost:8080/HelloServlet/hello,通过该请求扫描web.xml文件下所有Servlet,找到<servlet-mapping>...</servlet-mapping><url-pattern>为hello的Servlet,得到<servlet-name>

2)通过<servlet-name>得到Servlet具体实现类路径,如:<servlet-class>com.zz.HelloServlet</servlet-class>

3)通过<servlet-class>com.zz.HelloServlet</servlet-class> 定位到 com.zz包下HelloServlet.java文件


五、web.xml 其他配置

1. web.xml中配置默认首页访问

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

2. 设置Servlet自启动

有时 Tomcat 一启动,就需要执行一些初始化的代码,比如校验数据库的完整性等,所以就需要Servlet实现自启动,在初始化方法init()中,就可以进行一些业务代码的工作了。

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
        <load-on-startup>10</load-on-startup>
    </servlet>
    
<load-on-startup>的取值范围为0-99,表示启动优先级,优先级最高为0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值