zoukankan      html  css  js  c++  java
  • Maven创建servlet项目演示(三)

    上一节用Maven新建了web项目成功后,本文演示在此基础上应用servlet。

    从对tomcat服务器进行配置可的过程中可以知道,tomcat作为servlet容器运行,负责处理客户请求,把请求传送给servlet并把结果返回给客户。

    这里的servlet作用是处理该客户请求的最终实体类。

    servlet实际上是一个有规定接口,属性和方法的java类,tomcat容器与servlet之间的接口是由servlet API定义好的,这个接口定义了tomcat容器在servlet上要调用的方法及传递给servlet的对象。

    tomcat服务器会在启动时,将在web.xml中配置好的servlet对象实例化,并加载到服务器的内存中,若接收到HTTP请求,服务器将调用相应的servlet对象来进行处理。

    所有的servlet都必须实现javax.servlet.Servlet接口,但是我们在进行http协议相关的web开发时,一般直接通过继承javax.servlet.HttpServlet类来实现。

    1.首先修改pom.xml文件,添加servlet依赖

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     3   <modelVersion>4.0.0</modelVersion>
     4   <groupId>com.lei.demo</groupId>
     5   <artifactId>maven-web-demo</artifactId>
     6   <packaging>war</packaging>
     7   <version>0.0.1-SNAPSHOT</version>
     8   <name>maven-web-demo Maven Webapp</name>
     9   <url>http://maven.apache.org</url>
    10   <dependencies>
    11       <!-- JUnit配置 -->
    12     <dependency>
    13       <groupId>junit</groupId>
    14       <artifactId>junit</artifactId>
    15       <version>3.8.1</version>
    16       <scope>test</scope>
    17     </dependency>
    18     <!-- 添加Servlet -->  
    19     <dependency>    
    20         <groupId>javax.servlet</groupId>    
    21         <artifactId>servlet-api</artifactId>    
    22         <version>3.1-b02</version>    
    23         <scope>provided</scope>    
    24     </dependency>
    25   </dependencies>
    26   <build>
    27     <finalName>maven-web-demo</finalName>
    28   </build>
    29 </project>

     

     修改完保存后,项目会从Maven仓库中自动添加servlet-api-3.1-b02.jar包的引用,如果仓库中没有,会自动下载。操作步骤如下:

     

    简单说下:source folder和folder区别。因为本人在创建source folder的时候,总是莫名其妙的创建不了,或创建一个source folder结果它就跑到folder里面去了。(好像是一个bug来着,若你也出现同样的问题,请在创建source folder中以source folder,folder,package不同的形式来创建它。)

     

    source folder :存放java源代码的文件夹,当然也包括一些package文件夹,还可以包含其他文件. 项目构建后,source folder里面的java自动编译成class文件到相应的bin文件夹中,其他文件也会移到到相应的目录下.

     

    folder :里面可以放入任何文件.包括java源文件,jar文件,其他文件(例如,图片,声音等).在此我说明一下,如果里面含有java源文件,不管程序是否 正 确,eclipse都不会报错,把它们当做普通文件处理.但是项目如果要使用这里面的文件,情况就不同了.

     

    很多要在Java中访问的文件可以放在src下或者便于区分新建特定名字的source folder目录放在下面,这样的会随着编译自动将java文件被编译到default output folder路径下面若你重新设置了output folder文件路径,则编译到新设置的路径文件下),而不是java类型的文件,则是直接拷贝过去,这一切对于开发者都是透明的。需要注意的是,无论是使用默认或修改了的putput folder,在myeclipse工作目录中都以不可见的形式存在,当然你可以在文件夹中找到它

     

    2.新建一个Servlet

    在source folder下的src/main/java下创建一个com.sulei.demo包,包下创建一个ServletDemo类。

     

     

    一个servlet从产生到结束的流程如下:

    a. servlet容器创建servlet的一个实例,在需要该servlet处理的请求到时触发。

    b.容器调用该实例的init()方法。

    c. 如果容器对该servlet有请求,则调用此实例的service()方法。(注意是service而不是servlet)

    d. 容器在销毁本实例前调用它的destroy()方法,并还进行垃圾收集。

    所以servlet生命周期常常被定义为:加载,实例化,初始化,处理客户请求和销毁。一旦清清了一个servlet,就没有办法阻止容器执行一个完整的生命周期了。

    servlet类代码如下:

     1 package com.sulei.demo;
     2 
     3 import java.io.IOException;
     4 import javax.servlet.ServletException;
     5 import javax.servlet.http.HttpServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 /**
    10  * Servlet implementation class ServletDemo
    11  */
    12 public class ServletDemo extends HttpServlet {
    13     private static final long serialVersionUID = 1L;
    14        
    15     public ServletDemo() {
    16         super();
    17     }
    18   //doGet方法处理GET类型的请求
    19     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    20         doPost(request, response);
    21     }
    22   //doPost处理POST类型的请求
    23     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    24         request.setCharacterEncoding("UTF-8");  
    25         response.setContentType("text/html;charset=utf-8");
    26         
    27         String action = request.getParameter("action");  
    28         if("login_input".equals(action)) {  
    29             request.getRequestDispatcher("login.jsp").forward(request , response);  
    30         } else if("login".equals(action)) {  
    31             String name = request.getParameter("name");  
    32             String password = request.getParameter("password");  
    33               
    34             System.out.println("name->" + name + ",password->" + password);
    35         }
    36     }
    37 
    38 }

    3.修改web.xml配置文件

    web.xml配置文件的内容为:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     3   <javaee:display-name>Archetype Created Web Application</javaee:display-name>
     4   <servlet>
     5     <javaee:description></javaee:description>
     6     <javaee:display-name>ServletDemo</javaee:display-name>
     7     <servlet-name>ServletDemo</servlet-name>
     8     <servlet-class>com.sulei.demo.ServletDemo</servlet-class>
     9   </servlet>
    10   <servlet-mapping>
    11     <servlet-name>ServletDemo</servlet-name>
    12     <url-pattern>/demo</url-pattern>
    13   </servlet-mapping>
    14 </web-app>

    4.创建index.jsp

    jsp文件内容如下:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <p>用Maven创建web项目,测试Servlet</p>
    11     <a href="demo?action=login_input">登录(demo?action=login_input)</a>
    12 </body>
    13 </html>

    5.创建login.jsp

    jsp文件内容如下:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <form action="demo?action=login" method="post">  
    11         Name:<input type="text" name="name" />  
    12         Password:<input type="password" name="password" />  
    13               
    14         <input type="submit" value="登录" />  
    15     </form>  
    16 </body>
    17 </html>

    扩展内容:JSP是基于servlet的扩展,实际上JSP编译后就是servlet文件,不过使用jsp技术使得网页开发变得更加方便而已。

    servlet中只能通过out.println()语句输出HTML语法。

    JSP网页是传统的HTML文件中加入java程序片段和JSP标签构成的,servlet/JSP容器收到客户端的请求时,首先执行网页中的程序代码,然后把结果以HTML格式响应给客户端。

    现在效果图如下:(注意jsp文件存放的位置都是存放在webapp文件夹下)

    6.运行代码:右键单击工程名称-->run as -->myeclipse service application--> tomcat 7 .x-->ok

    各步骤截图如下:

    a.进入index页面

    b.进入login页面

    c.在窗口可以看到运行java程序获取jsp页面的name和password结果

  • 相关阅读:
    python与常用模块pandas,numpy,matplotlib等库学习笔记-2019.02.07更新
    C++异常处理相关用法及底层机制
    C++ regex库常用函数及实例
    leetcode-2-两数相加(链表)
    leetcode-1-两数之和(三种方法)
    中序遍历(递归+迭代)
    C++实现四则运算器(带括号)
    C++实现四则运算器(无括号)
    Visual Studio2019 基于WSL的Linux C++开发
    Visual Studio 2019 基于Linux平台的C++开发
  • 原文地址:https://www.cnblogs.com/understander/p/5510474.html
Copyright © 2011-2022 走看看