Servet基础

发布于:2022-11-09 ⋅ 阅读:(22) ⋅ 点赞:(0) ⋅ 评论:(0)

目录

Tomcat安装

运行

启动

停止

修改端口

创建本地项目

Servlet开发基础

Servlet概念;

Servlet作用:

tomcat和servlet的关系

编写第一个Servlet

开发环境

编写Servlet文件

配置web.xml

利用IDEA简单开发

简单的登录框

代码实现

实现效果图

登录及注册

代码实现

实现效果图

文件上传

代码实现

实现效果图


Tomcat安装

Tomcat官网:Apache Tomcat® - Welcome!

下载后解压文件如下:

bin

该目录下存放的是二进制可执行文件。

conf

这是一个非常非常重要的目录,这个目录下有四个最为重要的文件。server.xml:配置整个服务器信息。tomcatusers.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。context.xml:对所有应用的统一配置,通常我们不会去配置它。

lib

Tomcat的类库,里面是一大堆jar文件。

temp

存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!

logs

这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。

webapps

存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。

work

运行时生成的文件,最终运行的文件都在这里。

运行

启动

在bin目录下,终端输入startup.bat运行启动程序。

停止

/bin/shutdown.bat 停止程序。

修改端口

修改conf/server.xml文件。

 

创建本地项目

首先在webapps中创建新文件夹。例如:myfirstweb。

在新建的文件夹内创建WEB-INF文件夹,用于存放项目的核心内容。

在WEB-INF文件夹中:

创建classes,用于存放 .class文件

创建lib,用于存放 jar 文件

创建web.xml,项目配置文件

把网页 index.jsp 复制到myweb文件夹中,与WEB-INF同级目录。

打开tomcat服务,访问:

http://localhost:8000/myweb/

Servlet开发基础

推荐:

Servlet 教程 | 菜鸟教程 (runoob.com)

千锋教育Servlet视频教程:Servlet从入门到精通_哔哩哔哩_bilibili

Servlet概念;

ServletServer Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议Web服务器。

最早支持Servlet标准的是JavaSoftJava Web Server,此后,一些其它的基于JavaWeb服务器开始支持标准的Servlet

Servlet作用:

Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。通俗来讲servlet专门用来接收客户端的请求,专门接收客户端的请求数据,然后调用底层的service处理数据并生成结果返回数据。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet ,并让 Servlet 建立起服务器返回给客户机的响应。

 Servlet 可完成如下功能:
(1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML 页面。
(2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面( HTML 片段)。
(3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。
(4) 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如, Servlet
以是多参与者的游戏服务器。
(5) 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至 applet 的新连接,并将该连
接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下, applet 也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP )进行通信。
(6) 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括( SSI )。
(7)将定制的处理提供给所有服务器的标准例行程序。例如,Servlet可以修改如何认证用户。

tomcat和servlet的关系

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. 
Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户. 
而Servlet是一种运行在支持Java语言的服务器上的组件. 
Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品. 
从http协议中的请求和响应可以得知,浏览器发出的请求是一个请求文本,而浏览器接收到的也应该是一个响应文本。 
但是并不知道是如何转变的,只知道浏览器发送过来的请求也就是request,我们响应回去的就用response。 
①:Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象, 
所有的HTTP头数据读可以通过request对象调用对应的方法查询到。 
②:Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象, 
通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器 
Java Servlet API 是Servlet容器(tomcat)和servlet之间的接口,它定义了serlvet的各种方法, 
还定义了Servlet容器传送给Servlet的对象类,其中最重要的就是ServletRequest和ServletResponse。 
所以说我们在编写servlet时,需要实现Servlet接口,按照其规范进行操作。

编写第一个Servlet

开发环境

将Servlet相关 jar包导入到环境变量中。

编写Servlet文件

实现javax.servlet.Servlet,一般会去重写五个方法,在service()核心方法中打印出

My first Servlet!

编写java文件,内容如下。

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;


public class MyServlet implements Servlet{
    public void init(ServletConfig servletConfig) throws ServletException{

    }

    public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
        System.out.println("My first Servlet!");
    }

    public void destroy(){

    }
    public ServletConfig getServletConfig(){
        return null;
    }

    public String getServletInfo(){
        return null;
    }
}

然后运行编辑生成class文件放入\WEB-INF\classes文件夹下。

配置web.xml

然后启动Tomcat服务,访问:

localhost:8000/myweb/myservlet

利用IDEA简单开发

简单的登录框

代码实现

Index.html

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Insert title here</title>
</head>
<body>
<form action="MyTest">
  <div>
    姓名:<input type="text" name="name"/>
  </div>
  <div>
    密码:<input type="password" name="password"/>
  </div>
  <div>
    <input type="submit" value="提交" />
  </div>

</form>
</body>
</html>

直接访问feng.html

实现效果图

再来写一个注册登录页面。

登录及注册

代码实现

Loginservlet.java

import java.io.IOException;

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;


@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();//获取session
        Object name = session.getAttribute("name");//从session中获取用户名
        Object password = session.getAttribute("password");//从session获取用户密码
        System.out.println(name+":"+password); //测试一下,输出获取的用户名和密码
        session.invalidate(); //注销session
        response.sendRedirect("login.html"); //跳转到login.html页面
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
        // doGet(request, response);
        // 设置编码为utf-8
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        // 获取用户名和密码
        String name = request.getParameter("uname");
        String password = request.getParameter("password");
        // 校验用户名和密码是否正确
        if ("f0njl".equals(name) && "123456".equals(password)) {// 验证成功
            HttpSession session = request.getSession();//获取session
            session.setAttribute("name", name);// 将用户名和密码保存在session中
            session.setAttribute("password", password);// 将用户名和密码保存在session中
            response.sendRedirect("success.jsp");// 跳转到success.jsp页面
        } else {// 校验不成功,则留在跳转到login.jsp页面
            response.sendRedirect("login.html");
        }
    }

}

login.html

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>登录页面</title>
</head>
<body>
<form action="loginServlet" method="post"><!-- action写要请求Servlet的名 -->
  用户名:<input type="text" id="uname" name="uname"><br><br>
  密码:<input type="password" id="password" name="password"><br><br>
  <input type="submit" value="登录">
  <input type="reset" value="重置">
</form>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录成功页面</title>
</head>
<body>
登录成功!${name},${password}<form action="loginServlet" method="get"><input type="submit" value="注销登录"></form>
</body>
</html>

实现效果图

 

文件上传

代码实现

upload.html

<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>上传文件</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
  <input type="file" name="img"><p>
  <input type="submit" value=" 提 交 ">
</form>
</body>
</html>

UploadServlet.java

package upload;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(value="/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Override
    //因为提交表单只需要post,那么这里就不需要get方法了
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //首先拿到流信息,他返回的是一个part对象
        Part part = req.getPart("img");
        //手下声明一个保存路径,这里保存在D盘的File文件下
        String filePath = "xxxxx";//文件传输路径
        //保存文件的名称这里就和原文件的名称一样,通过part里面的方法得到原文件名称
        String fileName = part.getSubmittedFileName();
        //通过write方法,可以将这个png文件保存在任意路径下,write里面的参数,就是要保存的路径
        part.write(filePath+fileName);

        //然后给前端返回响应的结果
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<h1>上传成功</h1>");
    }}

实现效果图

 

上传文件名称:filePath+fileName