WEB核心【Servlet,阶段重点】第四章

简介: WEB知识中的(Servlet)很重要,该篇章,为大家详细介绍了Servlet,创建,使用,以及注意事项,常见问题总览,参数的获取,和分包思想,等等。

1,Servlet入门小案例,一些注意事项

Java编写服务器的小程序:servlet

一个功能至少是一个Servlet

image.gif编辑

注意事项:

    1. 导包之前,Tomcat必须停掉。
    2. 包的放置位置必须在:web/WEB-INF/lib

    image.gif编辑

    image.gif编辑

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>Demo1Servlet</servlet-name>
            <servlet-class>com.czxy.demo1.web.servlet.Demo1Servlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Demo1Servlet</servlet-name>
            <url-pattern>/d1</url-pattern>
        </servlet-mapping>
    </web-app>

    image.gif

    image.gif编辑

    Demo1Servlet

    public class Demo1Servlet extends BaseServlet {
        public String run1(){
            System.out.println("我是run1");
            return null;
        }
    }

    image.gif

    image.gif编辑

    2,Servlet【阶段重点】

           2.1:概述

    用来接收浏览器数据,返回服务器处理结果

    Servlet 接收并处理http请求信息(行、头、体)

    Servlet生成http响应信息(行、头、体)

           2.2:注意事项&常见问题

    分析图

    image.gif编辑

    常见问题希望大家可以记住,出错的时候能很快进行解决

    1,路径和web.xml配置里面的不一样,会报ClassNotFoundException("类找不到异常")

    image.gif编辑

    2,IDEA控制台显示这种报错,检查web.xml文件

    image.gif编辑

    image.gif编辑

    3,报404错误的(访问路径不匹配)

    image.gif编辑

    4,Servlet初始化的错误

    500是服务器出错,初始化Servlet Demo2错误,因为找不到class文件

    image.gif编辑

    解决方案:

    1,检查web.xml中,servlet-class标签是否正确指向了Java类

    2,IDEA自动部署失败:删除out目录,让IDEA重新部署

    5,JavaBean的创建顺序

    1,实现序列化接口(后面有session序列化等操作,必要时给予序列化ID)

    2,私有化成员变量

    3,getter/setter方法

    4,无参构造

    5,带参构造

    6,toString

    5,web.xml的注意事项(路径禁止重复)

    image.gif编辑

    6,路径不正确

    image.gif编辑

    image.gif编辑

    3,获取参数列表(重点)

    image.gif编辑

    User1:

    public class User1 implements Serializable {
        private String username;
        private String password;
        @Override
        public String toString() {
            return "User1{" +
                    "username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
        public User1(String username, String password) {
            this.username = username;
            this.password = password;
        }
        public User1() {
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
    }

    image.gif

    form.html:

    <h1>表单提交数据测试</h1>
    <form method="post" action="http://localhost:8080/day03/d1?method=run1">
       用户名:<input type="text" name="username"/><br/>
       密码:<input type="password" name="password"/><br/>
       性别:<input type="radio" name="sex" value="man"/>男
            <input type="radio" name="sex" value="woman"/>女<br/>
       爱好:<input type="checkbox" name="hobby" value="code"/>编码
           <input type="checkbox" name="hobby" value="run"/>跑步
           <input type="checkbox" name="hobby" value="swim"/>游泳<br/>
       <input type="submit"/>
    </form>

    image.gif

    Demo1Servlet

    public class Demo1Servlet extends BaseServlet {
        public String run1(){
            User1 user1 = toBean(User1.class);
            System.out.println(user1);
            return null;
        }
    }

    image.gif

    小结:

    1、JavaBean javaBean = toBean(JavaBean.class);

    表单输入项的name属性需要和JavaBean成员变量名保持一致,才能正常填充数据。

    2、提交路径:

    action="http://域名:端口号/资源路径?method=方法名"

    action="/资源路径?method=方法名"

    完整的列表获取方式:

    User2:

    public class User2 implements Serializable {
        private String id;
        private String username;
        private String password;
        private String sex;
        private String[] hobby;
        @Override
        public String toString() {
            return "User2{" +
                    "id='" + id + '\'' +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", sex='" + sex + '\'' +
                    ", hobby=" + Arrays.toString(hobby) +
                    '}';
        }
        public User2(String id, String username, String password, String sex, String[] hobby) {
            this.id = id;
            this.username = username;
            this.password = password;
            this.sex = sex;
            this.hobby = hobby;
        }
        public User2() {
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public String[] getHobby() {
            return hobby;
        }
        public void setHobby(String[] hobby) {
            this.hobby = hobby;
        }
    }

    image.gif

    form2.html

    <h1>表单提交数据测试</h1>
    <form method="post" action="/day03/d1">
       <!--访问servlet的run2方法-->
       <input type="hidden" name="method" value="run2"/>
       用户名:<input type="text" name="username"/><br/>
       密码:<input type="password" name="password"/><br/>
       性别:<input type="radio" name="sex" value="man"/>男
            <input type="radio" name="sex" value="woman"/>女<br/>
       爱好:<input type="checkbox" name="hobby" value="code"/>编码
           <input type="checkbox" name="hobby" value="run"/>跑步
           <input type="checkbox" name="hobby" value="swim"/>游泳<br/>
       <input type="submit"/>
    </form>

    image.gif

    Demo1Servlet

    public String run2(){
        User2 user2 = toBean(User2.class);
        System.out.println(user2);
        return null;
    }

    image.gif

    小结:

      1. 必须有成员变量id,为以后准备
      2. 多个值用String[] 来封装
      3. 使用表单提交数据给servlet,使用隐藏域来决定访问servlet的哪个方法

       

      4,XmlUtils回顾

      image.gif编辑

      JavaEE中,写文件绝对路径:   D:/xxxx.xml

      5,分包思想(重要,清晰明了)

      image.gif编辑

      image.gif编辑

      最后:

             如果文章对您有帮助,就拿起小手赶紧给博主点赞💚评论❤️收藏💙 一下吧!

            愿我们在未来的日子里。熠熠生辉!!!

      相关文章
      |
      3月前
      |
      Java 应用服务中间件 Spring
      【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
      【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
      49 0
      |
      5月前
      |
      存储 缓存 前端开发
      Servlet与JSP在Java Web应用中的性能调优策略
      Servlet与JSP在Java Web应用中的性能调优策略
      48 1
      |
      5月前
      |
      C# 数据可视化 开发者
      WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
      【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
      268 0
      |
      5月前
      |
      存储 Java 关系型数据库
      基于Servlet和JSP的Java Web应用开发指南
      基于Servlet和JSP的Java Web应用开发指南
      117 0
      |
      5月前
      |
      监控 前端开发 Java
      揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
      【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
      43 0
      |
      7月前
      |
      自然语言处理 前端开发 Java
      Servlet与JSP:Java Web开发的基石技术详解
      【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
      129 12
      |
      7月前
      |
      存储 Java 关系型数据库
      基于Servlet和JSP的Java Web应用开发指南
      【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
      144 10
      |
      7月前
      |
      缓存 负载均衡 安全
      Servlet与JSP在Java Web应用中的性能调优策略
      【6月更文挑战第23天】在Java Web中,Servlet和JSP调优至关重要,以应对高并发和复杂业务带来的性能挑战。优化包括Servlet复用、线程安全、数据库连接池,以及JSP的编译优化、使用JSTL、页面缓存和静态内容分离。全局优化涉及负载均衡、异步处理和缓存策略。通过这些实践,开发者能提升应用响应速度和吞吐量,确保高负载下的稳定运行。
      98 7
      |
      7月前
      |
      搜索推荐 Java 数据库连接
      探索Java Web开发:Servlet与JSP的协同工作原理
      【6月更文挑战第23天】Java Web开发中,Servlet和JSP协同打造动态网站。Servlet是服务器端的Java程序,处理HTTP请求并执行复杂逻辑;JSP则结合HTML和Java,生成动态内容。Servlet通过`doGet()`等方法响应请求,JSP在首次请求时编译成Servlet。两者常搭配使用,Servlet处理业务,JSP专注展示,通过`RequestDispatcher`转发实现数据渲染。这种组合是Java Web应用的基础,即使新技术涌现,其价值仍然重要,为开发者提供了强大的工具集。
      79 7
      |
      8月前
      |
      缓存 前端开发 Java
      15:Servlet 3.0文件上传与下载-Java Web
      15:Servlet 3.0文件上传与下载-Java Web
      213 5