第一个JSP程序实现及原理分析

本文介绍如何使用Eclipse和Tomcat搭建开发环境,包括配置步骤、环境变量设置及Servlet与JSP的基础应用。详细解析了get与post请求的区别,并通过示例展示了Servlet生成静态页面及双色球随机数生成的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Eclipse结合Tomcat开发一个简单的Servlet和JSP

  1. 首先需要配置Tomcat,使得能够正常启动Tomcat安装完毕需要将jre换成jdk需要配置好如下三个环境变量:JAVA_HOME
    CATALINA_HOME
    PATH
  2. Servlet是JAVA服务器端编程,不同于我们之前写的一般的JAVA应用程序,Servlet程序是运行在服务器上的,服务器有很多种,此次用到的服务器就是Tomcat
  3. 常用的服务器:Tomcat、Resin、Jetty、Weblogic、WebSphere、JBoss
  4. 在 Tomcat 安装目录的 conf 目录下打开 server.xml 文件,找到倒数第四行,在上面加入如下 XML 片段:
    在这里插入图片描述
  5. 启动 Tomcat(startup.bat),打开浏览器,访问如下地址:http://localhost:8080/test/login.jsp
  6. web.xml(deployment descriptor),部署描述符
  7. 我们可以将 Servlet 看作是嵌套了 HTML 代码的 Java 类;可以将 JSP看作是嵌套了 Java 代码的 HTML 页面。
  8. jsp被编译后会生成servlet,拿eclipse来说,编译后的路径:
    工程.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\JspProject\org\apache\jsp
  9. get 与 post 方法之间的差别:
    1) 浏览器地址栏呈现的结果不同(表象)
    2) 真正的原因在于向服务器端发送请求时的形式是不同的
    用GET方法请求,底层实现是:
    GET /JavaWeb/LoginServlet?username=12345&password=12345 HTTP/1.1
    对于POST来说:
    POST /JavaWeb/LoginServlet HTTP/1.1
    Connection:Keep-Alive(回车)
    (回车)
    username=12345&password=12345
    我们可以看出POST方法并不是把信息附加在URL上面而是作为请求体的一部分一起发送过去的
  10. 通过浏览器进行文件上传时,一定要使用 post 方式而绝不能使用get 方式。
  11. 通过浏览器地址栏输入网址的方式来访问服务器端资源,全部使用的是 get 方法请求
    jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="LoginServlet" method="post">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="submit">&nbsp;&nbsp;&nbsp;
<input type="reset" value="reset">
</form>
</body>
</html>

servlet

package learn.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 LoginServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		System.out.println("doGet invoked");
		process(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		System.out.println("doPost invoked");
		process(req, resp);
	}
	
	private void process(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		System.out.println(req);
		System.out.println(resp);
		
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		
		resp.setContentType("text/html");
		
		PrintWriter out = resp.getWriter();
		
		out.println("<html><head><title>Login Result</title></head>");
		
		out.println("<body> username: " + username + "</br>");
		out.println("password: " + password + "</body></html>");
		
		out.flush();
	}
	
	
	
}

web.xml

<servlet>
	  <servlet-name>LoginServlet</servlet-name>
	  <servlet-class>learn.servlet.LoginServlet</servlet-class>
	</servlet>
<servlet-mapping>
	  <servlet-name>LoginServlet</servlet-name>
	  <url-pattern>/LoginServlet</url-pattern>
	</servlet-mapping>

当jsp页面用get方法请求时输出:
doGet invoked
org.apache.catalina.connector.RequestFacade@5f6f951c
org.apache.catalina.connector.ResponseFacade@bc2e865
当jsp页面用post方法请求时输出:
doPost invoked
org.apache.catalina.connector.RequestFacade@5f6f951c
org.apache.catalina.connector.ResponseFacade@bc2e865
在这里插入图片描述
在这里插入图片描述

使用Servlet生成静态页面

客户端、服务器与 Servlet/JSP 之间的关系
在这里插入图片描述

简单双色球实现

package learn.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

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


public class DoubleColorBailServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Set<Integer> set = new HashSet<Integer>();
		
		Random random = new Random();
		
		while (set.size() !=6) {

			int randomValue = random.nextInt(33) + 1;
			
			set.add(randomValue);
		}
		
		int randomValue = random.nextInt(16) + 1;
		
		String result = "red ball: ";
		
		for(Integer integer : set){
			result += integer + " ";
		}
		
		result += "<br>blue ball:" + randomValue;
		
		response.setContentType("text/html");
		
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><title>result</title></head>");
		out.println("<body><h1>" + result + "</h1></body></html>");
		
		out.flush();
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

结果是:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值