servlet基本使用

这篇博客介绍了如何用Servlet替换do开头的JSP页面,实现登录功能。首先创建一个简单的登录界面,然后创建一个实现了Servlet接口的LoginServlet类,处理登录请求。接着通过配置Servlet的访问路径,使得能够处理POST请求。最后提到了使用HttpServlet子类简化代码,并用注解配置Servlet访问路径。整个过程涉及了Servlet的生命周期方法、请求处理以及配置管理。
摘要由CSDN通过智能技术生成

兄弟姐妹们我又来啦

看了之前我的博客应该可以看到我的很多java方法都是写到do开头的文件里,今天呢就是对这些文件进行优化,也就是编写自己的servlet。

我们今天的任务主要是:

1.干掉所有doxxx.jsp的页面
2.编写java文件来代替doxxx.jsp
3.Servlet接口具备接收前端请求的功能

面向对象有三要素:封装、继承、多态

今天我们用登录来做实例

首先创建一个简单的登录界面

<form action="" method="post">
    <p><input type="text" name="username"></p>
    <p><input type="text" name="password"></p>
    <p>
        <button>登录</button>
    </p>
</form>

我们创建一个包,包里创建一个类(需要实现servlet接口)

servlet接口中有五个方法

初始化:第一次进来: 当请求来到这个servlet 就会调用init方法

public void init(ServletConfig servletConfig) throws ServletException {
  
}

服务:所有的代码全部写在这个方法中

public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
        
    }

销毁:

什么时候销毁

1.服务关闭了
2.这个类被修改

public void destroy() {
       
}

得到配置

public ServletConfig getServletConfig() {
   return null;
}

得到信息

public String getServletInfo() {
   return null;
}

实现登录请求的处理

package com.zking.servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @Description 用来实现登录请求的处理
 **/
@SuppressWarnings("all")
public class LoginServlet implements Servlet {

    //生命周期

    @Override  //init 初始化
    public void init(ServletConfig servletConfig) throws ServletException {
        //第一次进来: 当请求来到这个servlet 就会调用init方法
        System.out.println("开始初始化");
    }

    @Override //服务
    public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
        HttpServletResponse response = (HttpServletResponse) resp;
        HttpServletRequest request = (HttpServletRequest) req;
        //所有的代码全部写在这个方法中
        req.setCharacterEncoding("utf-8");
        //取到用户数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //通过响应对象获取了输出对象
        PrintWriter out = response.getWriter();
        //取session通过请求对象
        HttpSession session = request.getSession();
        //取application通过请求对象 context->容器
        ServletContext application = request.getServletContext();
        //走数据库
        if("root".equals(username)&&"root123".equals(password)){
            //登录成功
            out.println("登录成功");
        }else{
            //登录失败
            out.println("登录失败");
        }
    }

    @Override //销毁
    public void destroy() {
        //1.服务关闭了
        //2.这个类被修改了
        System.out.println("我销毁了");
    }

    @Override //得到配置
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override //得到信息
    public String getServletInfo() {
        return null;
    }

}

注:pageContext拿不到

取application通过请求对象的单词与其他两个不同

但是现在我们还用不了,我们需要设置一个访问路径

给servlet配置访问路径

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>web20</display-name>
  <welcome-file-list>
    <welcome-file>/index.html</welcome-file>
  </welcome-file-list>
  
  <!-- 如果修改了这个 一定要重启服务器 -->
  
  <!-- 1.配置servlet -->
  <servlet>
  	<!-- 给他取一个名字 -->
  	<servlet-name>one</servlet-name>
  	<!-- servlet-class需要填上类的全路径 -->
  	<servlet-class>com.king.servlet.LoginServlet</servlet-class>
  </servlet>
  
  <!-- 2.配置servlet的访问路劲 -->
  <!-- mapping映射 -->
  <servlet-mapping>
  	<!-- 对应的servlet的名字 -->
  	<servlet-name>one</servlet-name>
  	<!-- 给他配置一个访问的路径 路径必须加/-->
  	<url-pattern>/login.do</url-pattern>
  </servlet-mapping>
  
</web-app>

注:配置的路径必须是“/”开头后面的名字可以自己随便写

需要在首页中添加这个界面设置配置路径

<form action="login.do" method="post">
    <p><input type="text" name="username"></p>
    <p><input type="text" name="password"></p>
    <p>
        <button>登录</button>
    </p>
</form>

到实现类先进初始化再进服务


但是这样的写法有些麻烦

传统的开发模式:配置式开发
注解式开发: @注解

上面的是用的实现方法,那么现在我们用继承方法来进行操作吧

首先在包中创建一个类,继承HttplServlet

public class MyServlet extends HttpServlet{
	
}

我们可以继承到两个方法

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

他们针对不同的请求方式:
doGet 专门处理get请求
doPost 专门处理post请求

但是有些(比如表单)既有get请求又有post请求,那我们可以直接在doGet中添加doPost方法

然后直接在doPost方法中写登录验证就ok了

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//登录功能
		doPost(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//登录功能
		//取到用户数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        resp.setCharacterEncoding("gb2312");
        // 【utf-8】【gb2312】【big5】
        //通过响应对象获取了输出对象
        PrintWriter out = resp.getWriter();
        //取session通过请求对象
        HttpSession session = req.getSession();
        //取application通过请求对象 context->容器
        ServletContext application = req.getServletContext();
        //走数据库
        if("root".equals(username)&&"root123".equals(password)){
            //登录成功
            out.println("登录成功");
        }else{
            //登录失败
            out.println("登录失败");
        }
	}

我们还是需要给servlet配置访问路径,用注解的方法

@WebServlet("/test.do")//直接填访问路径

然后在首页添加路径就可以了

支持中文的三种编码

  • 【utf-8】
  • 【gb2312】
  • 【big5】

如果乱码就在输出前设置中文编码

resp.setCharacterEncoding("gb2312");
  

今天就到这咯,下次见宝们

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值