Tomcat配置及Servlet相关知识

这里以Eclipse为例,IDEA配置参考:IDEA 配置 Tomcat

一、Eclipse配置Tomcat

1.配置服务器运行环境

在窗口-首选项找到服务器-运行时环境,点击添加

在Apache中找到安装的Tomcat版本,下一步

选择安装目录以及所需的jdk版本,添加完成后应用并关闭

2.新建服务器

窗口-显示视图,找到服务器,打开

点击服务器视图中的连接

新建服务器,选择Tomcat的对应版本

3.新建动态Web项目

右键左侧空白处新建动态Web项目

输入项目名,下一步

勾选生成web.xml部署描述符,完成

4.创建类继承HttpServlet

创建一个类用于演示,项目结构如下

编写代码:

@WebServlet(urlPatterns = "/easy")
public class EasyServlet extends HttpServlet{
 
	//Servlet java服务端应用程序
	//EasyServlet extends HttpServlet
	//EasyServlet也是一个java服务端应用程序
	//就可以接收浏览器发送过来的请求
	//浏览器发送请求一般有两种形式 get/post
	
	//HttpServlet中定义了doGet和doPost两个方法
	//分别来处理get请求和post请求
	
	@Override
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws
 IOException {
		System.out.println("----接收到请求");
		//接收参数
		String params_name= request.getParameter("name");
		
		response.getWriter().write("params---"+params_name);
	}
	
	@Override
	public void doPost(HttpServletRequest request,HttpServletResponse response) {
		
	}
	
}

5.启动服务器

右键服务器-添加和移除

点击添加

再次右键服务器,启动

控制台会打印日志

6.测试访问

浏览器中可以访问到

二、请求转发与重定向

        请求转发是指服务器接收到客户端的请求之后,将该请求转发给另一个资源进行处理,并将处理结果返回给客户端。客户端并不知道服务器进行了请求转发,它只知道最终返回的结果。这种方式下,客户端只发送了一次请求,服务器进行了多次处理。

        重定向是指服务器接收到客户端的请求之后,返回一个特殊的响应码,告诉客户端需要重新发送请求到另一个URL。客户端会根据这个响应码进行解析,并重新发送请求到指定的URL。这种方式下,客户端发送了两次请求,第一次请求到达服务器后,服务器会返回特殊的响应码,然后客户端再根据这个响应码发送第二次请求。

1、请求转发

        只能在项目中转发

编写一个类测试请求转发

@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws 
ServletException, IOException {
		System.out.println("HelloServlet接收到请求");
		resp.getWriter().write("HelloServlet   response");
	}
}

修改EasyServlet中的方法

	@Override
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws
IOException, ServletException {
		System.out.println("----接收到请求");
		//接收参数
		String params_name= request.getParameter("name");
		//转发
		if(params_name!=null) {
			//回应
			response.getWriter().write("params---"+params_name);
			return;
		}else {
			//转发
			request.getRequestDispatcher("/hello").forward(request,response);
			return;
		}
	}

测试请求转发

2、重定向
        //重定向
		if("re".equals(params_name)) {
			response.sendRedirect("https://www.baidu.com");
			return;
		}

三、Servlet

        Servlet是Java编写的服务器端程序,用于处理HTTP请求和响应。Servlet运行在Web服务器上,可以接收来自客户端的HTTP请求,并生成相应的HTTP响应。Servlet可以动态生成HTML页面、处理表单数据、访问数据库等。Servlet是JavaEE(Java Enterprise Edition)规范的一部分,它通过Java Servlet API提供了对服务器端开发的支持。

        Tomcat定义一个Servlet通过继承HttpServlet,不同的服务器可能会有差异。

1、Servlet的作用域

Servlet的作用域是指Servlet对象在内存中存在的范围或时间段。Servlet共有4个作用域:请求(Request)、会话(Session)、上下文(Context)和页面(Page)。

  1. 请求作用域(Request): 请求作用域表示Servlet对象在一次HTTP请求的处理过程中存在,并且仅对当前请求有效。在同一次请求中,不同的Servlet对象之间无法共享数据。可以使用request对象的setAttribute()和getAttribute()方法来实现在不同的Servlet之间传递数据。

  2. 会话作用域(Session): 会话作用域表示Servlet对象在整个用户会话过程中存在,即从用户发送第一个请求到用户关闭浏览器。会话作用域中的Servlet对象可以跨多个请求共享数据。可以使用session对象的setAttribute()和getAttribute()方法来实现在不同的请求之间传递数据。

  3. 上下文作用域(Context): 上下文作用域表示Servlet对象在整个Web应用程序的生命周期中存在。在同一个Web应用程序中的不同Servlet对象可以共享数据。可以使用servletContext对象的setAttribute()和getAttribute()方法来实现在不同的Servlet之间传递数据。

  4. 页面作用域(Page): 页面作用域表示Servlet对象在页面级别上存在,即一个页面对应一个Servlet实例。在同一个页面中的不同Servlet对象可以共享数据。可以使用pageContext对象的setAttribute()和getAttribute()方法来实现在不同的Servlet之间传递数据。

作用域对象 request,session,ServletContext

转发前设置一个键值对

            //作用域对象 request  session  ServletContext
			request.setAttribute("白龙马","小白龙");
			//转发
			request.getRequestDispatcher("/hello").forward(request,response);
			return;

接收请求

@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
 ServletException, IOException {
		System.out.println("HelloServlet接收到请求");
		Object obj = req.getAttribute("白龙马");
		resp.setHeader("Content-Type", "text/html;charset=utf-8");
		resp.getWriter().write("HelloServlet   response:"+obj);
	}
}

注:getParameter()和getAttribute()

request.getParameter()方法

用于获取前端请求中的参数值,一般用于获取用户提交的表单数据或URL参数。返回String

request.getAttribute()方法

用于获取请求域中的属性值,一般用于在请求的不同部分之间共享数据。返回Object

 2、 Servlet生命周期

        Servlet的生命周期指的是Servlet在服务器中从被创建到被销毁的整个过程。Servlet生命周期可以分为三个阶段:初始化、服务和销毁

        Servlet在第一次访问时实例化对象,实例化之后理解执行了初始化方法,是单例的,线程不安全。

//Servlet生命周期
//loadOnStartup默认-1,设置为正数则在启动时直接实例化对象,数值越小越优先
@WebServlet(urlPatterns = "/page",loadOnStartup = 1)
public class PageServlet extends HttpServlet{
	public PageServlet() {
		System.out.println("PageServlet------实例化对象");
	}
	
	@Override
	public void init() throws ServletException {
		System.out.println("PageServlet------初始化对象");
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws 
ServletException, IOException {
		//服务
		super.service(req, resp);
		//先执行service方法根据请求方式不同分别执行doGet或doPost方法
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
 ServletException, IOException {
		//处理业务获取数据...
		req.setAttribute("loginuser", "张三");
		req.getRequestDispatcher("/easypage.jsp").forward(req, resp);
		return;
	}
	
	@Override
	public void destroy() {
		//要结束时执行销毁
		System.out.println("PageServlet------销毁对象");
	}
 
}

第一次访问时

服务器停止时

四、jsp(Java server Page)

        JSP(Java Server Pages)是一种基于Java技术的服务器端技术,用于动态生成HTML页面。JSP允许在HTML页面中嵌入Java代码,通过标签和脚本语言来动态生成内容。与Servlet相比,JSP更加易于编写和维护,因为它可以直接在HTML页面中嵌入Java代码,而无需编写独立的Servlet类。当客户端请求一个JSP页面时,JSP引擎将会将其转换为一个Servlet类并编译执行,即Tomcat在运行时会将.jsp文件解析成一个Servlet

1、.jsp静态文件 

在webapps文件夹新建一个jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8" 
	pageEncoding="utf-8" isErrorPage="true" isELIgnored="true"%>
<!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>
	easypage页面
	<br/>
	<%-- 忽略EL表达式 --%>
	${loginuser}
	
	<!-- HTML注释 -->
	<%-- JSP注释 --%>
	
	<%-- JSP:java server page  tomcat在运行时会将.jsp文件解析成一个Servlet--%>
	<%-- JSP九大内置对象 --%>
	<%-- pageContext最小域对象、request、session、application四个域对象、 
	page当前对象、response、out、config、exception--%>
	
	<%-- 打印脚本 out.print() --%>
	<%=new String("<h1>你好</h1>") %>
	
	<%-- 运行脚本 运行java程序 --%>
	
	<table>
	<tr><td>ID</td><td>编号</td><td>姓名</td></tr>
	<% for(int i=0;i<num;i++){%>
		<tr><td><%= i+1 %></td><td><%= i+1001 %></td><td><%="张三" %></td></tr>
	<% } %>
	
	<%-- 声明脚本 声明属性 --%>
	<%! int num=12; %>
	</table>
</body>
</html>

 创建类

@WebServlet("/page")
public class PageServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
 ServletException, IOException {
		//处理业务获取数据...
		req.setAttribute("loginuser", "张三");
		req.getRequestDispatcher("/easypage.jsp").forward(req, resp);
		return;
	}
}

测试访问

JSP源码编译后的位置:在Eclipse中,这些文件可能会被存放在类似workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost的路径下。

2、九大内置对象

  • pageContext 域对象 页面 提供了对其他八大内置对象的统一访问
  • request  域对象 请求  用于获取客户端发送的请求信息
  • session  域对象 会话  用于在多个页面之间保持用户的会话信息
  • application  域对象 应用 servletContext  用于在整个Web应用程序中共享数据
  • page 代表当前JSP页面本身,可以直接调用其中的方法
  • response 用于向客户端发送响应
  • out  用于向客户端输出内容,是JSP页面向客户端发送响应的出口
  • config  用于获取Web应用程序的配置信息,如Servlet初始化参数等
  • exception  用于处理JSP页面中发生的异常。

3、jsp3种脚本

    <%-- 打印脚本  out.print() --%>
	<%=new String("<h1>你好</h1>") %>
	
	<%-- 运行脚本  运行java程序 --%>
	
	<table>
		<tr><td>ID</td><td>编号</td><td>姓名</td></tr>
		<% for(int i=0; i<4; i++){ %>>
			<tr><td><%= i+1 %></td><td><%= i+1001 %></td><td><%= "张三" %></td></tr>
		<% } %>
	</table>
	
	<%-- 声明脚本  声明属性 --%>
	<%! int num=12; %>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值