【java学习】Servlet简单的表单程序(一)

此文用于java学习,在此小记。

在此小Demo中使用到了Servlet,所以有必要了解一下Servlet的相关知识。(Servlet的相关知识摘抄自http://blog.csdn.net/jiuqiyuliang/article/details/36424981)

Servlet是Sun公司提供的一门用于开发动态web网页的技术。Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,并把类部署到web服务器上就可以运行了。

到底什么是Servlet呢?

通俗一点,只要是实现了servlet接口的java程序,均称Servlet。Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小程序。

Servlet基础

 1、解读API文档,纯手工编写一个Servlet程序,并部署访问(如上所示)。

解读API对于拒绝学习API的程序员们是一种煎熬,但它却是我们学习和进步的最好工具,且学且珍惜。

大家可以在点进去看一看,从上图,可以看出Servlet接口定义三个实现类,分别是FacesServlet, GenericServlet, HttpServlet。下面我们简单的介绍一下。

 2、Servlet接口实现类

(1)FacesServlet是一个用于管理利用JSF(JavaServer Faces)构建用户界面的web应用程序请求处理生命周期的Servlet。(FacesServletis a servlet that manages the request processing lifecycle for web applications that are utilizing JavaServer Faces to construct the user interface.),大家如果想深入的学习,可以点这里

(2)GenericServlet是HttpServlet的父类,包含了servlet的常用方法。GenericServlet使得程序员写servlets更加简单,它提供了初始化和销毁生命周期的方法,以及实现了写日志文件的方法。

(3)HttpServlet指能够处理HTTP请求的servlet。这是开发人员在编写Servlet时,通常应继承这个类即可。

对于这三个实现类,只为大家做一个简单的介绍,如果想深入的研究,直接看API就好。

3、Servlet部署

客户端通过URL地址访问web服务器中的资源,所以若想访问Servlet必须要把servlet程序映射到一个URL地址上,在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成,如上面的实例。

*<servlet>用于注册Servlet,包含了<servlet-name>和<servlet-class>两个子元素,分别用于设置servlet的名称以及servlet的类名。

*<servlet-mapping>用于映射上面<servlet>中的对外访问路径,同样包含<servlet-name>和<url-pattern>两个元素,分别用于设置servlet的名称以及servlet的对外访问路径。

在servlet映射到URL有两种格式:

1.“*.扩展名”

2.以正斜杠(/)开头并以“/*”结尾。

servlet对url的匹配规则以及路径问题,大家可以上网查,有很多相关的资料,例如:http://blog.csdn.net/xh16319/article/details/8014107

4、Web服务器调用Servlet过程(Servlet生命周期)

servlet程序是由web服务器调用,web服务器实现了对servlet生命周期的管理。servlet的生命周期分为四步:

1)加载servlet并实例化,new的过程。

2)初始化init。

3)处理请求,调用servlet的service,doget,dopost方法将Request和Response,作为参数传递。

4)退出服务,调用destory方法释放资源。

注意:

1、servlet只实例化一次。感觉有点单例模式的意思,大家可以研究一下Tomcat的实现原理。

2、init方法也只执行一次。servlet实例只创建一次,所以init初始化只调用一次。

5、Servlet线程安全问题

当多个客户端并发访问同一个Servlet时,web服务器会为每一个客户端的访问请求创建一个线程,并在这个线程上调用service方法,因此,service方法内如果访问了同一个资源的话,就有可能引发线程安全问题。大家重点理解下面两句即可:
(1) Servlet是单实例多线程的,如果存在可以修改的成员变量将会出现线程安全问题。
(2) 使用Servlet最好保证Servlet是无状态的,也就是没有可以修改的成员变量。

以上为servlet的相关知识。

1.在Eclipse下New一个新的Web Project在此命名为Demo17自带生成web.xml(WEB-INF目录下)和index.jsp(WebRoot目录下),在WebRoot目录下New一个html在此起名为formdemo.html

2.右击Demo17下的src目录,在此目录下New一个java文件名为FormDemo.java

贴源码:

FormDemo.java

 1 import java.io.PrintWriter;
 2
 3 import javax.servlet.http.HttpServlet;
 4 import javax.servlet.http.HttpServletRequest;
 5 import javax.servlet.http.HttpServletResponse;
 6
 7
 8 public class FormDemo extends HttpServlet{
 9         public void doGet(HttpServletRequest request,HttpServletResponse response)
10         {
11             try
12             {
13                 response.setContentType("text/html;charset=gb2312");
14                 PrintWriter out = response.getWriter();
15                 String name,sex,phone,address,email;
16                 name = request.getParameter("name");
17                 sex = request.getParameter("sex");
18                 phone = request.getParameter("phone");
19                 address = request.getParameter("address");
20                 email = request.getParameter("email");
21                 out.println("<html><head><title>a</title></head>");
22                 out.println("<body>");
23                 out.println("<P><H3>名字:"+convertToChinese(name)+"</H3></P>");
24                 out.println("<P><H3>性别:"+convertToChinese(sex)+"</H3></P>");
25                 out.println("<P><H3>电话:"+phone+"</H3></P>");
26                 out.println("<P><H3>地址:"+convertToChinese(address)+"</H3></P>");
27                 out.println("<P><H3>电子邮件:"+email+"</H3></P>");
28                 out.println("</BODY></HTML>");
29
30             }
31             catch(Exception ex)
32             {
33                 ex.printStackTrace();
34             }
35         }
36
37         private String convertToChinese(String source)
38         {
39             String s = "";
40             try
41             {
42                 s = new String(source.getBytes("ISO8859_1"));
43             }
44             catch(java.io.UnsupportedEncodingException ex)
45             {
46                 ex.printStackTrace();
47             }
48
49             return s;
50         }
51 }  

formdemo.html

 1 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <title>简单的表单程序</title>
 5   </head>
 6
 7   <body>
 8     <center>
 9         <form action="http://localhost:8080/Demo17/login">
10             <table border="0" cellpadding="3">
11                 <tr>
12                     <td>姓名:</td>
13                     <td><input type="text" name="name"></td>
14                 </tr>
15                 <tr>
16                     <td>性别:</td>
17                     <td><input type="radio" name="sex" value="男" checked>男
18                     <input type="radio" name="sex" value="女" checked>女</td>
19                 </tr>
20                 <tr>
21                     <td>电话:</td>
22                     <td><input type="text" name="phone"></td>
23                 </tr>
24                 <tr>
25                     <td>地址:</td>
26                     <td><input type="text" name="address"></td>
27                 </tr>
28                 <tr>
29                     <td>电子邮件:</td>
30                     <td><input type="text" name="email"></td>
31                 </tr>
32                 <tr>
33                     <td align="center" colspan="2">
34                         <input type="submit" value="Submit">
35                         <input type="reset" value="Reset">
36                     </td>
37                 </tr>
38             </table>
39         </form>
40     </center>
41   </body>
42 </html>

最后在web.xml文件里完成Servlet的配置

web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3   <display-name>Demo17</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12
13   <servlet>
14       <servlet-name>loginServlet</servlet-name>
15       <servlet-class>FormDemo</servlet-class>
16   </servlet>
17
18   <servlet-mapping>
19       <servlet-name>loginServlet</servlet-name>
20       <url-pattern>/login</url-pattern>
21   </servlet-mapping>
22 </web-app>

3、一定要启动服务器,之后在浏览器中输入你的URL,此时我们就可以调用Servlet了

Submit之后

于是乎一个简单的表单Demo完成。

时间: 2024-08-12 12:29:27

【java学习】Servlet简单的表单程序(一)的相关文章

java 之 servlet如何获取表单的数据

servlet如何获取表单的数据 前端页面通过form表单的形式提交数据 服务端定义servlet接口 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcption { // 定义一个用户信息类 Users u = new User(); String username; String password; Date birthday;

html学习之简单注册表单

1 <html> 2 <head> 3 <title>新用户注册</title> 4 <meta charset="utf-8"> 5 <style> 6 li{ 7 list-style-type: none; 8 } 9 </style> 10 </head> 11 <body> 12 <center> 13 <form action="#&quo

Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交

在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts.WebWork和Spring MVC都是基于Servlet的.本文主要讲述MyEclipse和Tomcat配置Servlet的过程和简单实现表单提交功能. 希望对大家有所帮助,参考书籍<Java EE企业级应用开发实例教程>. Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 一. Servlet编程 1.Web基础知识 在讲述Servlet之前,

jQuery学习之:Validation表单验证插件

http://polaris.blog.51cto.com/1146394/258781/ 最近由于公司决定使用AJAX + Struts2来重构项目,让我仔细研究一下这两个,然后集中给同事讲讲,让每个人都能够有所掌握,慢慢会用.于是,自己便开始学习…… 由于Struts2自己早就学过,因而不需要花多少时间.而AJAX之前没怎么用过.现在AJAX框架如此之多,选择哪一个呢?开始打算选择 dojo,但是看了一点后,发现蛮复杂的.在之前有学过一点点jQuery,而网上也说jQuery很强大而且很容易

Java 添加、删除Excel表单控件

通过表单控件,用户可以快速地将数据填写到模板文档中,轻松引用单元格数据并与其进行交互.本文通过Java代码示例介绍如何在Excel表格中添加表单控件,包括文本框.单选按钮.复选框.组合框.微调按钮等:以及如何删除Excel中的指定表单控件.程序运行环境:Java.IDEA.jdk1.8.0.无需安装Microsoft Excel使用工具:Free Spire.XLS for Java (免费版)jar获取及导入:官网下载jar包,并解压,将lib文件夹下的jar文件导入java程序.或者可通过m

ASP学习----基本用法和表单

ASP写法: 写法1:<%="Hello World!"%> 写法2:<% Response.Write("Hello World!") %> ASP声明变量:使用dim 如下: <html> <body> <% dim name name = "xiaohong" Response.write("your name is:"+name & "<br

java jersef rest接收html表单提交

在上传的文件的时候,前台的html的表单,通常会写出enctype="multipart/form-data"格式的,很多人这时候会困惑.通过request.getparameter()接收请求的时候,接收的参数都是null,后台接收不到.有人直接通过servelt去获取,有人通过struts去获取.我的解决方案是通过jersef的rest来解决的. 表单提交两次,在submit按钮的时候写了个onclick方法.按钮先提交submit,将文件上传到服务器.再通过ajax方法传到映射的

JQuery中一个简单的表单验证的实例

html代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&quo

[Spring MVC]学习笔记--表单标签的使用

github例子地址: https://github.com/lemonbar/spring-mvc-jsp 效果图 关于spring mvc的标签的讲解, 有一篇blog已经讲的很细了. http://haohaoxuexi.iteye.com/blog/1807330 官方文档地址: http://docs.spring.io/spring/docs/4.0.6.RELEASE/spring-framework-reference/htmlsingle/#view-jsp 而且我在上面的例子