基于Tomcat的基础javaweb项目开发

        本文仅是学生党复习总结,望广大网友指正!

一、Servlet

        Servlet 是 Server Applet 的缩写,译为“服务器端小程序”,是一种使用 Java 语言来开发动态网站的技术。

        Servlet 虽然被称作“小程序”,但是它的功能却异常强大,因为它是基于 Java 的,几乎可以使用所有的 Java API,Java 能做的事情,Servlet 也能做。

        Java 是一种功能强大的通用型编程语言,可以处理 HTTP 请求,可以访问数据库,可以生成 HTML 代码,您完全可以使用原生 Java 来开发动态网站。但是,使用原生 Java 开发动态网站非常麻烦,需要自己解析 HTTP 请求的报头,需要自己分析用户的请求参数,需要自己加载数据库组件……种种原因导致使用原生 Java 开发动态网站几乎是一件不能被接受的事情。正是基于这种原因,Java 官方后来推出了 Servlet 技术,它对开发动态网站需要使用的原生 Java API 进行了封装,形成了一套新的 API,称为 Servlet API。

        您可以这样理解,Servlet 是一种基于 Java 的动态网站开发技术。编写 Servlet 代码需要遵循 Java 语法,一个 Servlet 程序其实就是一个按照 Servlet 规范编写的 Java 类。Servlet 程序需要先编译成字节码文件(.class文件),然后再部署到服务器运行。

        严格来说,Servlet 只是一套 Java Web 开发的规范,或者说是一套 Java Web 开发的技术标准。只有规范并不能做任何事情,必须要有人去实现它。

        所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、方法、属性等。所有的 Servlet 功能都是通过一个名为Servlet的接口(Interface)向外暴露的,编写 Servlet 代码,可以从实现 Servlet 接口开始。直接实现 Servlet 接口比较麻烦,需要实现很多方法,所以 Servlet 规范又提供了两个抽象类,分别是 GenericServlet 类和 HttpServlet 类,它们都实现了 Servlet 接口的很多常用功能。和 GenericServlet 类相比,HttpServlet 类更加方便,所以实际开发中一般都继承自 HttpServlet 类。

        Servlet 是第一代 Java Web 开发技术,它将 HTML 代码以字符串的形式向外输出,编写 HTML 文档就是在拼接字符串,非常麻烦,所以 Java 官方又推出了第二代 Web 开发技术——JSP。(在此不细说)

二、servlet容器

        强烈建议看这个网站,讲述的非常清晰

        Servlet容器(Web容器)是什么 (biancheng.net)

三、Tomcat项目结构

        

目录描述是否必须
\servletDemoWeb 应用的根目录,属于该 Web 应用的所有资源都存放在这个目录下。
\servletDemo\WEB-INF存放 web.xml、lib 目录以及 classes 目录等。
\servletDemo\WEB-INF\classes存放各种 .class 文件或者包含 .class 文件的目录,Servlet 类的 .class 文件也存放在此。
\servletDemo\WEB-INF\lib存放应用所需的各种 jar 包,例如 JDBC 驱动程序的 jar 包。
\servletDemo\WEB-INF\web.xmlweb.xml 中包含应用程序的配置和部署信息。
\index.htmlweb应用主页

     web.xml 中各元素含义及用法如下:

  • <web-app>: 根元素。
  • <servlet> :用于注册 Servlet,即给 Servlet 起一个独一无二的名字。
  • <servlet> 包含两个主要的子元素 <servlet-name> 和 <servlet-class>,分别用于指定 Servlet 的名称和 Servlet 的完整限定名(包名+类名)。
  • <servlet-mapping> :用于定义 Servlet 与 URL 之间的映射。
  • <servlet-mapping> 包含两个子元素 <servlet-name> 和 <url-pattern>,分别用于指定 Servlet 的名称和虚拟路径。

四、实例Myservlet

html代码

<html>
    <head>
    <title>
        My First Project
    </title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    </head>

    <body>
        <H1 align="center">My First Projct</H1>

        <form action="servlet/Myservlet" method="post">

        <table border="1">
            <tr>
                <th>必填</th>
                <th>必选</th>
            </tr>
            <tr>
                <td>
                    Name:
                    <input type="text" size="20" name="name" value=""><br>
                </td>
                <td>
                    Sex:
                    <input type="radio" name="sex" value="man">Man
                    <input type="radio" name="sex" value="woman">Woman
                </td>
            </tr>
            <tr>
                <td>
                    City:
                    <input type="text" size="20" name="city" value=""><br>
                </td>
                <td>
                    <select name="grade">
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                    </select>
                </td>
            </tr>
        </table>
        <input type='submit' name='submit' value='go'>
        </form>
    </body>

</html>

Myservlet代码


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 Myservlet extends HttpServlet {
    public Myservlet(){
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        String name = request.getParameter("name");
        String city = request.getParameter("city");
        String sex = request.getParameter("sex");
        String grade = request.getParameter("grade");

        writer.println(" <html>");
        writer.println("<head><title>MyWeb01</title> <meta http-equiv='Content-Type' content='text/html;charset=utf-8'/> </head><br>");
        writer.println("<body>");
        writer.println("<H1 align=\"center\">Hello!</H1><br>");
        writer.println("Name:"+name);
        writer.println("<br>");
        writer.println("City:"+city);
        writer.println("<br>");
        writer.println("<img src='/"+sex+".jpg'/>");
        writer.println("<br> you grade is:" + grade);
        writer.println("</body>");
        writer.println("</html>");
    }

}

 web.xml

接下来要详细说一说这个项目中url的问题:

  1. HTML 基础 | 菜鸟教程 (runoob.com)此链接中笔记讲述的非常详细。(要注意的是从servlet返回的html代码是相对于servlet的虚拟路径的文件夹)
  2. 由于带/是相对于服务器的根目录,不带/是相对于当前项目目录;故带/是和http://localhost/拼接,不带/是和http://localhost/项目名/拼接。
  3. web.xml中构造了servlet-name(Myservlet)和url-pattern(虚拟路径)的映射,然后通过这个name去找到对应着这个class(类)。html代码中的action应该填写对应的虚拟路径。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值