文档章节

Hello,Servlet!

蒙尘
 蒙尘
发布于 08/22 22:53
字数 1424
阅读 10
收藏 0

Servlet来源


上文说过了servlet是什么,我们从servlet是什么中也可以了解到servlet的来源:servlet是Java的一个类,并且能够运行在web容器上,所以servlet是按照web容器的规范和Java的规范写的可以运行在特定web容器(web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。一个服务器可以有多个容器。)上的java类。一般来说,我们可以在tomcat的运行库中找到有关servlet的库。如下图所展示:

tomcat容器自带的包

其中servlet-api.jar为我们需要的servlet

Servlet编写

我们已经知道了servlet是由java编写的,所以在开发时我们需要使用java语言来编写servlet程序,开始入门的时候建议完全手写代码,不要使用开发环境,这样的话会对servlet程序的结构更加了解,对以后深入学习会有帮助。渡过入门期后可以使用开发环境,用于提高开发效率(不得不说开发环境的各种快捷操作真的很方便),推荐使用Eclipse或者IDEA,前者体量小,后者更加功能齐全。

编写servlet程序不是简简单单就能编写的,需要先知道tomcat对于servlet程序是否有何要求,一般来说,我们所编写的webapp想要通过tomcat发布出去的话就要将app放到tomcat的webapps目录下,在此目录下的webapp想要工作必须要按照下图的目录结构:

目录结构

其中web.xml文件,WEB-INF文件夹,lib文件夹都是必须要存在的,classes在某些情况下可以不存在,建议初学者要加上。

  • demo/ 是webapp的总文件夹,tomcat会从该文件夹开始检查,看是否符合目录要求
  • WEB-INF/ 存放webapp的必要配置信息,库函数和class文件,servlet程序一般包含在这个文件夹下的lib和class下
  • login.jsp 则是该webapp要访问的页面

按照上述目录结构创建好后,我们就可以在class下touch java文件并编写代码:

package cn.edu.swu;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class login extends HttpServlet {

        public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
                this.doPost(request,response);
}
        public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
                response.setContentType("text/html");

                PrintWriter out = response.getWriter();
                String username = (String)request.getParameter("user");
                String password = (String)request.getParameter("pass");
                if(username.equals("tomcat") && password.equals("tomcat")){
                        out.println("success!");
                }
                else{
                        out.println("fail!");
                }


        }


}

Httpservlet是继承自genericservlet的一个类,genericservlet是servlet接口实现的一个类,网站编写用到的一般为Httpservlet所以我们可以继承Httpservlet类。其中的Post和Get为网页请求的方法,我们可以用Httpservlet对这两个方法进行重写,重写的方法可以写自己想要处理的代码。本示例中写了一个简单的login程序。

写好servlet程序后我们如果想要使用servlet并且让tomcat知道我的servlet,那么我们需要在web.xml(为tomcat的配置文件)中配置servlet。至于servlet什么时候创建,这就涉及到了servlet的生命周期,我们下续再讲。

<?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"
	metadata-complete="true">

	<display-name>Tomcat Documentation</display-name>
	<description>
		Tomcat Documentation.
	</description>

	<servlet>
		<servlet-name>login</servlet-name>
		<servlet-class>cn.edu.swu.login</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>login</servlet-name>
		<url-pattern>/login</url-pattern>
	</servlet-mapping>	
</web-app>

这个配置文件我们可以从tomcat的自带app中寻找,然后再对寻找到的xml文件加以修改即可。顶部的内容博主也未曾仔细了解过,但大致知道是什么意思,这些网址为xml的命名空间namespace,tomcat可以根据命名空间来对这些内容处理,所以有时候不联网是可能运行不成功的。

至此还需要做一个简单的页面出来,用来作展示和收集显式数据。

<html>
	<head>
		<center>Please Login</center>
	</head>
	
	<body>
		<center>
		<form action="./login" method="POST" >
			user: <input type="text" name="user"/> <br><br>
			pass: <input type="password" name="pass"/> <br><br>
			<input type="submit" value="submit"/> <br>
		</form>
		</center>
	</body>
</html>

form表单中的action应填写为servlet-mapping中url-pattern中的内容。他们应保持一致。

到现在为止你应该可以访问到login.jsp但是距离成功还差的一点。因为我们只写了java文件还没有编译成可以执行的2进制文件,并且我们需要的servlet库也没有导入到我们自己的app库下,复制好servlet-api.jar文件后我们需要使用javac -cp 文件路径/servlet-api.jar 要编译的java文件 命令来编译写好的源文件。

上述工作完成后,我们可以稍等一会儿等待tomcat自己部署app,可以通过查看catalina.out(在tomcat下的logs中可以找到)判断app是否加载完成。最终效果就如下:

登录界面

输入自己写入的username和password后,后端就会根据提交的值来返回不同的结果。

result

到现在为止属于自己的一款app就开发成功了,虽然很简单,但是万事开头难,学会简单的那么难的也就不难了。

下一篇博文将介绍servlet的声明周期以及一些配置->

© 著作权归作者所有

蒙尘
粉丝 0
博文 4
码字总数 3349
作品 0
北碚
私信 提问
简单的servlet的实现之Hello实现原理

简单的servlet介绍: javax.servlet.Servlet接口:任何的Servlet必须实现的接口(被容器调用) void init(ServletConfig config):初始化一个Servlet时会被调用 void service(ServletRequest ...

lzw_me
2014/04/27
157
0
JavaWeb12-HTML篇笔记(二)

Ø 为什么学习JSTL: JSTL和EL结合 替换页面中<%%> Ø JSTL版本: JSTL1.0 :不支持EL表达式. JSTL1.1 和 1.2 :支持EL表达式. Ø JSTL的标签库:包含了五类标签. core(核心标签),fmt(国际化标签)...

我是小谷粒
2018/05/28
0
0
一个简单的Spring MVC小例子,为什么总是报404错误

web.xml代码如下: spring-mvc-study2 springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc-servlet.xml 1 springmvc / index.jsp sp......

FlashRui
2017/01/17
391
1
The requested resource is not available

package com.demo; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet......

sunny冰青
2015/02/01
1K
1
用eclipse创建一个最简单的velocity项目

必备环境: JDK(不低于1.6建议1.7)、 eclipse java EE版 、tomcat(不低于5建议7.0) 为eclipse安装velocity编辑插件: 在Eclipse的Help->Install New Software... 点击“Add加 Veloeclipse,值...

Yason_Luo
2014/01/03
929
0

没有更多内容

加载失败,请刷新页面

加载更多

玩转 Springboot 2 之热部署(DevTools)

Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序。在IDE中工作时,这可能是一个有用的功能...

桌前明月
34分钟前
3
0
CSS--列表

一、列表标识项 list-style-type none:去掉标识项 disc:默认实心圆 circle:空心圆 squire:矩形 二、列表项图片 list-style-img: 取值:url(路径) 三、列表项位置 list-style-position:...

wytao1995
今天
10
0
linux 命令-文本比较comm、diff、patch

本文原创首发于公众号:编程三分钟 今天学了三个文本比较的命令分享给大家。 comm comm 命令比较相同的文本 $ cat charabc$ cat chardiffadc 比如,我有两个文件char和chardiff如上,...

编程三分钟
今天
9
0
QML教程

https://blog.csdn.net/qq_40194498/article/category/7580030 https://blog.csdn.net/LaineGates/article/details/50887765...

shzwork
今天
7
0
HA Cluster之5

对于使用heartbeat v2版的CRM配置的集群信息都是保存在一个名为cib.xml的配置文件中,存放在/var/lib/heartbeat/crm/下。CIB:Cluster Information Base,由于xml文件配置不是那么方便,所以...

lhdzw
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部