Java Servlet基础使用详解

前言

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就讲完了,全部为基础核心内容,如有不解欢迎交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值