后台开发学习——Servlet

后台开发学习——Servlet

目录:

1、什么是Servlet?

2、任务:

3、生命周期:

4、我用过的一些servlet的web.xml配置:

5、Servlet表单数据:


1、什么是Servlet?

答:Servlet为创建基于web的应用程序提供了基本组件,独立于平台的方法,可以不受CGI程序的性能限制。Servlet有权访问所有的Java API,包括访问企业级数据库的jdbc API。

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

 

2、任务:

答:Servlet 执行以下主要任务:

读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。

读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。

处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。

发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。

发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

 

3、生命周期:

答:(1)初始化:init方法,init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。

(2)处理客户的请求:service方法,每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。

(3)终止:destroy方法,destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

(4)在eclipse中操作:

①将web工程从IDE下面的servers按钮中加入到tomcat中

②启动tomcat

③默认时在浏览器地址栏输入:localhost:8080/工程名/Java类名查看运行结果

(5)代码示例:

Web.xml配置源代码:

<?xml version="1.0" encoding="UTF-8"?>
<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">
  <display-name>LearnWeb</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  	<servlet-name>ServletLearn1</servlet-name>
  	<servlet-class>com.remoa.servlet.ServletLearn1</servlet-class>
  </servlet>	
  <servlet-mapping>
  	<servlet-name>ServletLearn1</servlet-name>
  	<url-pattern>/ServletLearn1</url-pattern>
  </servlet-mapping>
</web-app>

ServletLearn1.java源代码:

package com.remoa.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletLearn1 extends HttpServlet{
	private static final long serialVersionUID = 1L;
	private String message;
	public void init()throws ServletException{
		//执行必须的初始化
		message = "Hello world";
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置响应内容类型
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		out.println("<h1>" + message + "</h1>");
	}

	public void destroy(){
		
	}
}

运行结果:

 

图3.1 运行结果

 

4、我用过的一些servlet的web.xml配置:

答:servlet元素必须出现在所有servlet-mapping元素之前。

①Servlet:在向servlet或jsp页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。

②Servlet-mapping:服务器一般为servlet提供一个缺省的URL,http://host/webAppPrefix/servlet/ServletName。但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素。

 

5、Servlet表单数据:

答:(1)get方法:get方法向页面请求已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔。

请求字符串中最多只能有1024个字符。

(2)post方法:把信息作为一个单独的消息。消息以标准输出的形式传递到后台程序,后台再进行解析。

(3)使用servlet读取表单数据:

①getParameter方法:获取表单参数的值。

②getParameterValues方法:参数出现一次以上,则调用该方法,并返回多个值,例如复选框。

③getParameterNames方法:得到当前请求中所有参数的完整列表。

DoGet方法代码示例1:

package com.remoa.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/HelloForm")
public class HelloForm extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public HelloForm() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置相应内容类型
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String title = "使用GET方法读取表单数据";
		String docType = "<!DOCTYPE HTML> \n";
		out.println(docType +
				"<html> \n" +
				"<head><title>" + title + "</title></head>\n" +
				"<body style='background-color:#F0F0F0'>\n" +
				"<h1 style='text-align:center'>" + title + "</h1>\n" +
				"<ul>\n" +
				"<li>用户名: " +
				request.getParameter("name") + "</li>\n" +
				"<li>密码:" +
				request.getParameter("password") + "</li>\n" +
				"</ul>\n" +
				"</body>\n" +
				"</html>"
				);
	}
}

运行结果:

 

图5.1 截图1

 

DoGet方法代码示例2:

Html页面代码:

<!DOCTYPE html>
<html>
<head>
<span style="white-space:pre">	</span><meta charset="UTF-8">
<span style="white-space:pre">	</span><title>Insert title here</title>
</head>
<body>
	<form action="HelloForm" method="get">
		用户名:<input type="text" name="name"/>
		<br />
		密码:<input type="text" name="password" />
		<input type="submit" value="提交"/>
	</form>
</body>
</html>

Java程序代码:

package com.remoa.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/HelloForm")
public class HelloForm extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public HelloForm() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置相应内容类型
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String title = "使用GET方法读取表单数据";
		String docType = "<!DOCTYPE HTML> \n";
		out.println(docType +
				"<html> \n" +
				"<head><title>" + title + "</title></head>\n" +
				"<body style='background-color:#F0F0F0'>\n" +
				"<h1 style='text-align:center'>" + title + "</h1>\n" +
				"<ul>\n" +
				"<li>用户名: " +
				request.getParameter("name") + "</li>\n" +
				"<li>密码:" +
				request.getParameter("password") + "</li>\n" +
				"</ul>\n" +
				"</body>\n" +
				"</html>"
				);
	}
}

运行结果:

 

图5.2 截图2

 

图5.3 截图3

DoPost方法示例:

Java代码示例:

package com.remoa.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/PostTest")
public class PostTest extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public PostTest() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String title = "Post获取表单数据";
		String username = new String(request.getParameter("userName").getBytes("ISO8859-1"),"utf-8");
		String doctype = "<!DOCTYPE HTML>\n";
		out.println(doctype + "<html>\n" + "<head>\n" + "<title>" + title + "</title>\n" + "</head>" + "<body>\n" + "<h3>用户名:" + username +
				"</h3>\n" + "<h3>密码:" + request.getParameter("password") + "</h3>\n" + "</body>\n" + "</html>");
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

Html页面代码:

<!DOCTYPE html>
<html>
<head>
<span style="white-space:pre">	</span><meta charset="UTF-8">
<span style="white-space:pre">	</span><title>Insert title here</title>
</head>
<body>
	<form action="PostTest" method="post">
		用户名:<input type="text" name="userName" />
		<br />
		密码:<input type="text" name="password" />
		<br />
		<input type="submit" value="提交"/>
	</form>
</body>
</html>

运行结果:

 

图5.4 截图4

 

图5.5 截图5


读取复选框数据代码示例:

package com.remoa.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/CheckboxTest")
public class CheckboxTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
    public CheckboxTest() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String title = "读取复选框数据";
		String doctype = "<!DOCTYPE HTML>\n";
		out.println(doctype + "<html>\n" + "<head>\n" + "<title>" + title + "</title>\n" + "</head>" + "<body>\n" + "<h3>计算机网络:" +
		request.getParameter("net") + "</h3>\n" + "<h3>计算机组成原理:" + request.getParameter("theory") + "</h3>\n" + "<h3>计算机操作系统:"
				+ request.getParameter("system") + "</h3>\n" + "</body>\n" + "</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

Html页面代码:

<!DOCTYPE html>
<html>
<head>
<span style="white-space:pre">	</span><meta charset="UTF-8">
<span style="white-space:pre">	</span><title>Insert title here</title>
</head>
<body>
	<form action="CheckboxTest" method="post">
		请选出你最喜欢的科目:
		<input type="checkbox" name="net" />计算机网络
		<input type="checkbox" name="theory" />计算机组成原理
		<input type="checkbox" name="system" />计算机操作系统
		<input type="submit" value="提交" />
	</form>
</body>
</html>

运行结果:

 

图5.6 截图6

 

图5.7 截图7

得到表单的全部数据代码示例:

package com.remoa.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ReadParams")
public class ReadParams extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public ReadParams() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String title = "得到所有表单的数据";
		String doctype = "<!DOCTYPE HTML>\n";
		out.println(doctype + "<html>\n" + "<head>\n" + "<title>" + title + "</title>\n" + "</head>" + "<body>\n" +
		 "<table style=\"border:1px solid\">" + "<tr>" + "<th>参数值</th><th>参数值</th>\n" + "</tr>\n");
		Enumeration params = request.getParameterNames();
		while(params.hasMoreElements()){
			String paramName = (String)params.nextElement();
			out.println("<tr><td>" + paramName + "</td>\n");
			String[] paramValues = request.getParameterValues(paramName);
			if(paramValues.length == 1){
				String paramValue = paramValues[0];
				if(paramValue.length() == 0){
					out.println("<td>没有值</td>");
				}else{
					out.println("<td>" + paramValue + "</td>");
				}
			}else{
				out.println("<td><ul>");
				for(int i = 0; i < paramValues.length; i++){
					out.println("<li>" + paramValues[i] + "</li>");
				}
				out.println("</ul></td>");
			}
			out.print("</tr>");
		}
		out.println("</table></body></html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

Html代码:

<!DOCTYPE html>
<html>
<head>
<span style="white-space:pre">	</span><meta charset="UTF-8">
<span style="white-space:pre">	</span><title>Insert title here</title>
</head>
<body>
	<form action="ReadParams" method="post" target="_blank">
		请选出你最喜欢的科目:
		<input type="checkbox" name="net" checked="checked"/>计算机网络
		<input type="checkbox" name="theory" />计算机组成原理
		<input type="checkbox" name="system" />计算机操作系统
		<input type="checkbox" name="structure" />计算机系统结构
		<input type="submit" value="提交" />
	</form>
</body>
</html>

运行结果:

 

图5.8 截图8


图5.9 截图9


  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值