Java Servlet基础使用详解

8 篇文章 0 订阅

前言

Java Servlet的核心思想就是在Web服务器端创建用来响应用户请求的对象,而该对象就被称为一个Servlet对象;而原本一个用户在访问JSP页面时Web服务器就会自动生成一个Java文件,而编译它则会创建一个Servlet对象,但是为了满足我们要实现的特定功能,所以就需要我们自主编写特定的Servlet。


创建运行一个最简单的Servlet

Servlet示例代码:

package servletTest;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyFirstServlet extends HttpServlet{
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
    public void service(HttpServletRequest request,HttpServletResponse response)throws IOException {
        response.setContentType("text/html;charset=utf-8");//响应类型
        PrintWriter out= response.getWriter();
        out.println("<html><body>");
        out.println("第一个Servlet");
        out.println("</body></html>");
    }

}

完成了我们的Servlet类的编写,接下来我们还需要在XML文件里配置此Servlet的相关信息才行。
相关配置内容保存在我们项目的WebContent\WEB-INF\的web.xml中。
我们需要在此文件中的标记中加入以下代码:

  <servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>servletTest.MyFirstServlet</servlet-class><!-- 包名加类名 -->
  </servlet>
  <servlet-mapping>
    <servlet-name>myServlet</servlet-name><!-- 有一个servlet标签就必须有一个对应的mapping -->
    <url-pattern>/firstServlet</url-pattern>
  </servlet-mapping>

在配置完成后我们就可以运行我们的Servlet了,我们通过直接通过映射地址访问:http://localhost:8080/JavawebTest(此为项目名)/firstServlet(此为要使用的Servlet的mapping名字)


通过一个JSP页面来访问我们的Servlet

而在访问之前我们一定要了解我Servlet的生命周期:

  1. 初始化Servlet对象
    当Servlet第一次被加载时服务器会创建一个Servlet对象,该对象会调用init方法初始化。
  2. service方法响应请求
    创建的Servlet会再调用service根据get或者post调用doGet和doPost来响应用户请求。
  3. Servlet对象消亡
    当服务器关闭时,会调用destroy方法结束自己的生命。

注:
1、init、service、destroy方法都是HTTPServlet类中的方法都可根据自己的需要进行重写。
2、对于一个请求Servlet的用户init方法只会在被创建时被执行一次,而service则会每次请求service都被执行,而且不同用户访问Web服务器时都会为不同用户建立新的线程,不同用户在不同的线程中执行互不干扰。
3、HTTP请求类型是get那么service就会调用doGet方法响应,同理请求post就用doPost响应,所以一般没有必要重写service,根据需要重写doGet和doPost就可以。

需要用JSP页面访问Servlet时,只需要把我们表单响应的action改为我们的web.xml中对应Servlet的中的的值就可以对应到我们的Servlet上请求响应。用一个登录验证的例子:

<!--加在<servlet-mapping>中-->
 <servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>servletTest.LoginServlet</servlet-class><!-- 包名加类名 -->
  </servlet>
  <servlet-mapping>
    <servlet-name>login</servlet-name><!-- 有一个servlet标签就必须有一个对应的mapping -->
    <url-pattern>/isLogin</url-pattern><!--表单action写isLogin,执行判断登录的Servlet-->
  </servlet-mapping>

  <servlet>
    <servlet-name>show</servlet-name>
    <servlet-class>servletTest.ShowUser</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>show</servlet-name>
    <url-pattern>/showuser</url-pattern>
  </servlet-mapping>


//JSP页面表单:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="isLogin" method="post">
    <table>
    <tr>
        <td>用户名:</td>
        <td><input type="text" name="user"/></td>
    </tr>
    <tr>
        <td>密 码:</td>
        <td><input type="password" name="pwd"/></td>
    </tr>
    <tr>
        <td><input type="submit" value="提交"/></td>
        <td><input type="reset" value="重置"/></td>
    </tr>
    </table>
</form>
</body>
</html>

//LoginServlet.java内容:
package servletTest;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {
        response.setContentType("text/html;charset=utf-8");//响应类型
        PrintWriter out= response.getWriter();
        request.setCharacterEncoding("UTF-8");
        String name =request.getParameter("user");
        String password = request.getParameter("pwd");
        out.println("<html><body>");
        if(name==null||name.length()==0) {
            out.print("请输入用户名");
        }


        else if(password==null||password.length()==0)
        {
            out.print("请输入密码");
        }

        else if(name.length()>0&&password.length()>0) {
            if(name.equals("yangyang")&&password.equals("iloveyou")) {
                out.println("信息输入正确");
                RequestDispatcher dispatcher = request.getRequestDispatcher("showuser");//获得RequestDispatcher对象dispatcher,转发到名为showuser的Servlet
                dispatcher.forward(request, response);//dispatcher对象调用forward方法实现转发

            }else {
                out.print("信息输入错误");
            }
        }

        out.println("</body></html>");
    }
}

这样就完成了一个小的Servlet应用。


session在Servlet中的使用

首先会话对象session可以再jsp页面中不作声明直接使用,而在Servlet类中必须先使用request对象获得用户的会话对象,然后再使用它:

HttpSession session=request.getSession(true);

注:我们在一个Web项目中,一个用户可以访问多个不同的Servlet,但是用户获取的session对象都是想用的,但是不同的用户session不同,利用这点我们可以轻松在多个页面调用session中所存储的值。比如:
在A页面我们有以下代码:

HttpSession session=request.getSession(true);
        session.setAttribute("Username", name);//将name的值存入session中名叫"Username"

接着我们在B页面调用:

HttpSession session=request.getSession(true);
        String name=(String)session.getAttribute("Username");//从session中拿到Username的值

到这里我们最基础的Servlet就讲完了,全部为基础核心内容,如有不解欢迎交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ServletJava Web 开发中最基础的组件之一,其主要作用是处理客户端(浏览器)发出的 HTTP 请求并返回响应结果。在 Servlet 中,有一些常用的方法,下面对这些方法进行详细介绍。 1. `init()` 方法 `init()` 方法是 Servlet 的生命周期方法之一,表示 Servlet 初始化时调用的方法。在 Servlet 对象被创建后,容器会自动调用 `init()` 方法,用来对 Servlet 进行初始化,例如读取配置文件、建立数据库连接等。`init()` 方法只会被调用一次。 2. `service()` 方法 `service()` 方法是 Servlet 的核心方法,用来处理客户端发送的请求并生成响应结果。在每次客户端请求时,容器都会调用 `service()` 方法,将请求信息封装为一个 `ServletRequest` 对象和一个 `ServletResponse` 对象,然后调用具体的 `doXXX()` 方法(如 `doGet()`、`doPost()` 等)来处理请求。 3. `destroy()` 方法 `destroy()` 方法也是 Servlet 的生命周期方法之一,表示 Servlet 被销毁时调用的方法。在 Servlet 对象被销毁前,容器会自动调用 `destroy()` 方法,用来释放资源、关闭数据库连接等。`destroy()` 方法只会被调用一次。 4. `doGet()` 方法 `doGet()` 方法是处理 HTTP GET 请求的方法。当客户端发送 GET 请求时,容器会自动调用 `doGet()` 方法,并将请求信息封装为一个 `HttpServletRequest` 对象和一个 `HttpServletResponse` 对象,然后在此方法中编写处理逻辑,并通过 `HttpServletResponse` 对象生成响应结果。 5. `doPost()` 方法 `doPost()` 方法是处理 HTTP POST 请求的方法。当客户端发送 POST 请求时,容器会自动调用 `doPost()` 方法,并将请求信息封装为一个 `HttpServletRequest` 对象和一个 `HttpServletResponse` 对象,然后在此方法中编写处理逻辑,并通过 `HttpServletResponse` 对象生成响应结果。 6. `doPut()` 方法 `doPut()` 方法是处理 HTTP PUT 请求的方法。当客户端发送 PUT 请求时,容器会自动调用 `doPut()` 方法,并将请求信息封装为一个 `HttpServletRequest` 对象和一个 `HttpServletResponse` 对象,然后在此方法中编写处理逻辑,并通过 `HttpServletResponse` 对象生成响应结果。 7. `doDelete()` 方法 `doDelete()` 方法是处理 HTTP DELETE 请求的方法。当客户端发送 DELETE 请求时,容器会自动调用 `doDelete()` 方法,并将请求信息封装为一个 `HttpServletRequest` 对象和一个 `HttpServletResponse` 对象,然后在此方法中编写处理逻辑,并通过 `HttpServletResponse` 对象生成响应结果。 以上是 Servlet 中常用的方法,了解这些方法可以帮助我们更好地理解 Servlet 的工作原理,并能够编写出符合规范的 Servlet 程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值