栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

6、Servlet

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

6、Servlet

6.1、Servlet简介

1、Servlet是sun公司开发动态web的一门技术
是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet是指任何实现了这个Servlet接口的类,
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
2、sun在这些API中提供一个接口叫做: Servlet, 如果你想开发一个Servlet程序, 只需要完成两个小步骤:
编写一个类, 实现Servlet接口
把开发好的Java类部署到web服务器中
把实现了Servlet接口的Java程序叫做,Servlet
Serlvet接口Sun公司有两个默认的实现类: HttpServlet、GenericServlet


6.2、HelloServlet

6.2.1、创建一个Javaweb-Servlet项目

1.构建一个普通的Maven项目, 删掉里面的src目录, 以后我们学习就在这个项目里面建立Moudel(模块);
这个工程就是Maven的主工程;

6.2.2、关于Maven父子工程的理解

父项目中会有:

		
        Servlet01
    

子项目中会有:模块(没有最好自己填上,在project标签里面)

 
    JavaWeb-Servlet	
    org.example						
    1.0-SNAPSHOT						
  

父项目中的jar包子项目可以使用,反之不行

6.2.3、Maven环境优化

1.修改web.xml为最新的




2.将Maven的结构搭建玩完整(java、resource)


6.2.4、编写一个Servlet程序

1.编写一个普通类
2.实现一个Serlvet接口, 这里只需要继承HttpServlet)
![image.png](https://img-blog.csdnimg.cn/img_convert/34e3bb1a119b0159effe15c9fef5dc29.png#clientId=u6dd0624b-c66e-4&from=paste&height=488&id=u1a13b0bd&margin=[object Object]&name=image.png&originHeight=522&originWidth=462&originalType=binary&ratio=1&size=145600&status=done&style=none&taskId=u251e420a-fae2-4927-9521-19420363538&width=432)

package com.servlet;


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

public class HelloWorld extends HttpServlet {
    //重写方法

    //由于get与post只是请求实现不同的方式,可以相互调用,业务逻辑都一样
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();//响应流
        writer.print("Hello,Servlet");
    }

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

6.2.5、编写Servlet映射

为什么要映射: 我们写的是Java程序, 但是要通过浏览器访问, 而浏览器需要连接web服务器, 所以我们需要在web服务器中注册我们写的Servlet, 还需给他一个浏览器能访问的路径
写在web标签中

    
        hello
        com.servlet.HelloWorld
    
    
    
    
        hello
        /hello
    

6.2.6、配置Tomcat

![image.png](https://img-blog.csdnimg.cn/img_convert/2501f32662c416563352250380e9519c.png#clientId=u6dd0624b-c66e-4&from=paste&height=398&id=u782475a5&margin=[object Object]&name=image.png&originHeight=372&originWidth=546&originalType=binary&ratio=1&size=119932&status=done&style=none&taskId=u7ba909ce-8658-4cb9-b0de-eb1c4004e45&width=584)
![image.png](https://img-blog.csdnimg.cn/img_convert/7d40bb6a499ecda9731b5e6aa731bc3d.png#clientId=u6dd0624b-c66e-4&from=paste&height=455&id=u0ebab71a&margin=[object Object]&name=image.png&originHeight=909&originWidth=1374&originalType=binary&ratio=1&size=67507&status=done&style=none&taskId=ue74c53bf-6d3a-47c0-97eb-68bc10b2d7a&width=687)


6.2.7、启动测试

![image.png](https://img-blog.csdnimg.cn/img_convert/0ffe0d295c57533429888da550f83c13.png#clientId=u6dd0624b-c66e-4&from=paste&height=70&id=u7a8e76e6&margin=[object Object]&name=image.png&originHeight=53&originWidth=551&originalType=binary&ratio=1&size=10631&status=done&style=none&taskId=ua0a90275-9ff3-4a97-a2bb-1dbfa708fb0&width=723.5)
web项目默认url是localhost:8080/s1
(s1是配置该web项目的tomcat时取的名字,默认是模块名.war)

如果需要进入web模块(程序)就需要配置映射:
然后访问url是:“localhost:8080/s1”+"url-pattern"
即: localhost:8080/s1/hello


6.3、Servlet原理

Servlet是有Web服务器调用, web服务器在收到浏览器请求后, 会:
![image.png](https://img-blog.csdnimg.cn/img_convert/6ddda04f12768d16ec4d21968979f147.png#clientId=u26f476f6-2157-4&from=paste&height=418&id=u6aac075c&margin=[object Object]&name=image.png&originHeight=503&originWidth=828&originalType=binary&ratio=1&size=207078&status=done&style=none&taskId=u049f49a5-eb72-44fb-be8a-b81aefbde43&width=688)
前端会打包所有信息到request里传到后端来,后端通过response处理好传回前端通过渲染展示
![image.png](https://img-blog.csdnimg.cn/img_convert/9187bcb565ff86b5c03c6ee94f6235d9.png#clientId=u26f476f6-2157-4&from=paste&height=513&id=u5cdcb05f&margin=[object Object]&name=image.png&originHeight=587&originWidth=789&originalType=binary&ratio=1&size=242607&status=done&style=none&taskId=u17bbd308-2dc2-4a4e-b812-ed41ff0112b&width=689.5)

6.4、Mapping问题

1.一个Servlet可以指定一个映射路径

		
    
    
        hello
        /hello
    

2.一个Servlet可以指定多个映射路径

    
    
        hello
        /hello
        
		

		
        hello
        /hello1
    
		

		
        hello
        /hello2
    


		
        hello
        /hello3
       

3.一个Servlet可以指定通用(通配符)映射路径



		
        hello
        /hello
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}


面试题: 重定向与请求转发的区别?
相同点: 页面都会实现跳转
不同点: 请求转发时url不会发生变化
重定向url会发生变化
<%–这里提交的路径,需要找到项目的路径–%>
<%– p a g e C o n t e x t . r e q u e s t . c o n t e x t P a t h 代 表 当 前 的 项 目 − − {pageContext.request.contextPath}代表当前的项目--%>


登陆页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



<%--这里提交的路径,需要找到项目的路径--%>
<%--${pageContext.request.contextPath}代表当前的项目--%>

    用户名: 
密码:

登陆成功:

<%--
  Created by IntelliJ IDEA.
  User: 20827
  Date: 2021/9/30
  Time: 18:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登陆成功


登陆成功!!!




servlet代码:

package com.servlet;

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 java.io.IOException;

@WebServlet(name = "Land_", value = "/Land_")
public class Land_ extends HttpServlet {
    //登陆页面跳转
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理请求
        String username = request.getParameter("username");//获取表单上传的内容
        String password = request.getParameter("password");//获取表单上传的内容

        System.out.println(username + ":" + password);

        response.sendRedirect("/re/success.jsp");//重定向
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

6.7、HttpServletRequest(请求)

HttpServletRequest代表客户端的请求, 用户通过Http协议访问服务器, HTTP请求中的所有信息会被封装到HttpServletRequest, 通过这个HttpServletRequest的方法, 获得客户端的所有信息
方法简介:

    String getParameter(String var1);//获取属性
	String getParameterValues(String var1);//获取多个属性

    String getContextPath();//获取上下文的路径

    int getIntHeader(String var1);//获取头信息
……

1.获取参数与请求转发
String getParameter(String var1);//获取属性
String getParameterValues(String var1);//获取多个属性

登陆页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登陆


登陆

<%--表单的意思是: 以post方式提交表单到LoginServlet页面--%>
用户名:
密码:
爱好: 女孩 代码 唱歌 电影

servlet:

package com.servlet;

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 java.io.IOException;
import java.util.Arrays;

@WebServlet(name = "LoginServlet", value = "/LoginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");//设置请求的编码(接受)
        response.setCharacterEncoding("utf-8");//设置响应的编码(处理)

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobbys = request.getParameterValues("hobby");

        System.out.println(username);
        System.out.println(password);
        System.out.println(Arrays.toString(hobbys));

        //通过请求转发
        //这里的 / 代表当前的项目的web应用
        request.getRequestDispatcher("/success.jsp").forward(request, response);
    }
}

登陆成功页面

<%--
  Created by IntelliJ IDEA.
  User: 20827
  Date: 2021/9/30
  Time: 19:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登陆成功


登陆成功


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341859.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号