服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - JavaWeb.servlet的基本使用方法详解

JavaWeb.servlet的基本使用方法详解

2022-11-29 14:51失格LXY Java教程

Servlet指在服务器端执行的一段Java代码,可以接收用户的请求和返回给用户响应结果,下面这篇文章主要给大家介绍了关于JavaWeb.servlet基本使用的相关资料,需要的朋友可以参考下

前言:

我们在前几篇文章里的web项目都是用jsp文件完成的,那么什么时候jsp算是学完了呢?——在jsp文件中没有java代码。

在原来的doxxx.jsp文件里写的都是处理登陆或者主页面功能的java代码,现在我们需要servlet来代替doxxx.jsp文件。

一.实现servlet

我们可以一个登陆来当例子。

建一个com.xxx.servlet包,在写一个LoginServlet类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.zking.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
/**
 *
 * @author zjjt
 *用来实现登陆请求的处理
 */
public class LoginServlet implements Servlet{
 
    //生命周期
    
    @Override//初始化
    public void init(ServletConfig arg0) 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通过请求对象
        ServletContext application = request.getServletContext();
        //与数据库数据做对比
        if("root".equals(username)&&"root123".equals(password)) {
            //登陆成功
            //转发:req.getRequestDispatcher("/xx").forward(req, resp);
            //重定向:需要强转响应
            //response.sendRedirect("/xx");
            out.println("登陆成功");
        }else {
            //登陆失败
            out.println("登陆失败");
        }
    }
    
    @Override//销毁
    public void destroy() {
        //什么时候销毁
        //1.服务关闭时
        //2.这个类被修改时
        System.out.println("我销毁了");
    }
    
    @Override//得到配置
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }
    
    @Override//得到信息
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }
 
 
}

 家人们注意了在代码里我使用了强转,是因为ServletRequest 和 ServletResponse 没有重定向功能,所有request(请求)和response(响应)取不到值。但是ServletRequest 和 ServletResponse的子类有重定向功能所有,我们要进行强转。

提供访问路径【web.xml】

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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>
  <!-- web.xml是整个项目的配置文件  -->
  <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 1.配置servlet -->
  <servlet>
    <!-- 给取个名字 -->
    <servlet-name>one</servlet-name>
    <!-- servlet-class需要填上类的全路径 -->
    <servlet-class>com.zking.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>

切记修改了web.xml的代码一定要重启服务器 

访问路径一定要加/,否则运行会报错

 登陆界面代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- action里填配置的路径不需要加/ -->
<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>
</body>
</html>

 这样我们的登陆就完成了,但是这样大家会不会觉得代码有点多,没关系,还有其他方法。

二.开发模式 

我们的开发模式有两种,一种是(传统的开发模式)配置式开发,另一种是注解式开发。我们上面所讲的就是配置式开发,接下来我们来讲一讲注解式开发~( ̄▽ ̄)~*。

注解式开发使用的是@注解,在代码中@WebServlet就等于web.xml里的

JavaWeb.servlet的基本使用方法详解

 在@WebServlet后面加上(),在里面直接填入路径,例如@WebServlet("/xxx")就等于web.xml里的

JavaWeb.servlet的基本使用方法详解

三.继承Servlet 

 使用注解式开发的方法我们就可以不用修改web.xml代码了,是不是简单多了(●'◡'●)。接下来我们写一个MyServlet文件,写Servlet有两种方法,一种式实现,另一种是继承。实现的方法我们已经写过了,接下来我们使用继承的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.zking.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 *
 * @author zjjt
 *
 */
@WebServlet("/test.do")//直接填访问路径
public class MyServlet extends HttpServlet{
    
    //不同的请求方式:
    //doGet 专门处理get请求
    //doPost 专门处理post请求
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //登陆功能
        doPost(req,resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //登陆功能
        //如果用户名是中文
        req.setCharacterEncoding("utf-8");
        //取到用户数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //支持中文的编码【utf-8】【gb2312】【big5】
        req.setCharacterEncoding("gb2312");
        //通过响应对象获得输出对象
        PrintWriter out = resp.getWriter();
        //通过请求对象取session,需要强转请求
        HttpSession session = req.getSession();
        //取application通过请求对象
        ServletContext application = req.getServletContext();
        //与数据库数据做对比
        if("root".equals(username)&&"root123".equals(password)) {
            //登陆成功
            //转发:req.getRequestDispatcher("/xx").forward(req, resp);
            //重定向:需要强转响应
            //response.sendRedirect("/xx");
            out.println("登陆成功");
        }else {
            //登陆失败
            out.println("登陆失败");
        }
    }
}

家人们有发现实现和继承servlet有什么区别了吗

我相信细心的家人们应该已经发现了我这里继承的是HttpServlet而不是Servlet。这是因为HttpServlet是它的子类,具有重定向功能,这下我们又可以省去强转的部分了。所有我推荐大家使用注解式开发模式和继承Servlet的方式来写Servlet哟~

总结

到此这篇关于JavaWeb.servlet基本使用的文章就介绍到这了,更多相关JavaWeb.servlet使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_64938628/article/details/124402611

延伸 · 阅读

精彩推荐
  • Java教程Android内存泄漏实战解析

    Android内存泄漏实战解析

    Java是垃圾回收语言的一种。这篇文章主要介绍了Android内存泄漏 的相关资料,需要的朋友可以参考下...

    妖久4492020-06-20
  • Java教程Idea开发工具之SpringBoot整合JSP的过程

    Idea开发工具之SpringBoot整合JSP的过程

    最近在学习SpringBoot,看到SpringBoot整合jsp,顺带记录一下。本文通过图文实例相结合给大家讲解SpringBoot整合JSP的过程,感兴趣的朋友一起看看吧...

    蹦蹦跳的鼻涕泡6492022-01-04
  • Java教程JEE与Spring Boot代码性能比较分析

    JEE与Spring Boot代码性能比较分析

    JavaEE与Spring Boot其实很难比较测试,前者适合单体SOA架构,后者适合微服务,但是还是有好事者把两者放在一起比较性能。这篇文章主要介绍了JEE与Spring ...

    jdon6982021-06-10
  • Java教程使用try-with-resource的输入输出流自动关闭

    使用try-with-resource的输入输出流自动关闭

    这篇文章主要介绍了使用try-with-resource的输入输出流自动关闭方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐...

    wunlie7982021-11-01
  • Java教程java中利用List的subList方法实现对List分页(简单易学)

    java中利用List的subList方法实现对List分页(简单易学)

    本篇文章主要介绍了java中list数据拆分为sublist实现页面分页的简单代码,具有一定的参考价值,有需要的可以了解一下。...

    ycb168913572020-07-02
  • Java教程Java maven详细介绍

    Java maven详细介绍

    今天给大家复习一下Java基础知识,简单介绍Maven,文中有非常详细的解释,对Java初学者很有帮助哟,需要的朋友可以参考下,希望能够给你带来帮助...

    啦哆咪12142021-12-23
  • Java教程MyEclipse+Tomcat配置详解(图文)

    MyEclipse+Tomcat配置详解(图文)

    这篇文章主要介绍了MyEclipse+Tomcat配置详解(图文),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    温柔狠角色6152021-07-01
  • Java教程Java超全面梳理内部类的使用

    Java超全面梳理内部类的使用

    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且...

    orangemilk_5522022-11-27