Servlet学习

Servlet学习

servlet通用配置方法

通用配置方法就是servlet3.0以下版本需要在web.xml中配置

  1. 得写一个Web工程 , 要有一个服务器。
  2. 测试运行Web工程
    1. 新建一个类, 实现Servlet接口
    2. 配置Servlet , 用意: 告诉服务器,我们的应用有这么些个servlet 在webContent/WEB-INF/web.xml里面写上以下内容。
    3. 为什么要做配置?
      答:必须将请求路径和java程序的对应关系建立起来。

servlet与普通的java程序的区别

1.必须实现servlet接口
2.必须在servlet容器(服务器)中运行
3.servlet程序可以接收用户请求参数以及向浏览器输出数据

代码实现servlet的步骤

得写一个Web工程 , 需要有一个服务器(tomcat服务器)。(我创建的工程名是06_servlet/)

  1. 在工程下创建com.lanou3g包,在包下创建一个类实现 Servlet接口
  2. 定义一个类
  3. 继承HttpServlet
  4. 重写doGet 和 doPost
package com.lanou3g;

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 HelloServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//获得GET请求参数
		String name = req.getParameter("name");
		//设置响应类型和编码
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out = resp.getWriter();
		out.println("<h1>Hello servlet!我是"+name+",正在学习Servlet!</h1>");
		
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 切记,不用调用父类的同名方法(因为父类中没有做任何逻辑处理,只是简单返回了一个错误) !!!
		//super.doPost(req, resp);
		// 设置POST请求编码
		req.setCharacterEncoding("UTF-8");
		// 如果POST方式请求和GET方式请求,后台处理的业务逻辑一样的话,这里可以直接调用doGet
		doGet(req, resp);
		// 如果业务逻辑和GET方式不一样
		// do something...
	}
}

  1. 在web.xml中配置书写好的servlet
<!-- 向tomcat报告, 我这个应用里面有这个servlet, 名字叫做HelloServlet , 具体的路径是com.lanou3g.HelloServlet -->
   <servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.lanou3g.HelloServlet</servlet-class>
  </servlet>
  <!-- 注册servlet的映射。  servletName : 找到上面注册的具体servlet,  url-pattern: 在地址栏上的path 一定要以/打头 -->
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  1. 在WebContent下面创建index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="common/common.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet学习</title>
</head>
<body>

	<h1>GET请求</h1>
	<%-- 用相对路径访问HelloServlet --%>
	<a href="hello?name=林俊杰">HelloServlet(相对路径)</a>
	<br />
	<%-- 用绝对路径访问HelloServlet(JSP中的绝对路径是从端口号后面开始) --%>
	<a href="${pageContext.request.contextPath }/hello?name=大黑子">HelloServlet(绝对路径)</a>
	<br />
</body>
</html>

注意:把项目添加到tomcat服务器中才能在浏览器中访问
7. 在浏览器地址栏中输入http://localhost:8080/06_servlet/
就可以看到如下所示
在这里插入图片描述
相对路径(路径名中没有完整)在这里插入图片描述
绝对路径(路径中的url完整)这是我的理解,如果不对请指出。
在这里插入图片描述

用servlet3.0的方式继续学习servlet

在com.lanou3g包中继续创建一个类

  1. 定义一个类(HelloServlet3)
  2. 继承HttpServlet
  3. 重写doGet 和 doPost
package com.lanou3g;

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;

/**
 * Servlet3.0写法
 * @author John
 *
 */
@WebServlet("/hello3")  // 代替了在web.xml中servlet相关的配置
public class HelloServlet3 extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 6673712407112700149L;

	/**
	 * 处理Get请求
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取GET请求参数
		String name = req.getParameter("name");
		// 设置响应类型和编码
		resp.setContentType("text/html;charset=UTF-8");
		// 获取输出对象
		PrintWriter out = resp.getWriter();
		out.println("<h1>Hello Servlet3!, 我是"+name+", 正在学习Servlet!</h1>");
	}
	
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 切记,不用调用父类的同名方法(因为父类中没有做任何逻辑处理,只是简单返回了一个错误) !!!
		// super.doPost(req, resp);
		// 设置POST请求编码
		req.setCharacterEncoding("UTF-8");
		// 如果POST方式请求和GET方式请求,后台处理的业务逻辑一样的话,这里可以直接调用doGet
		doGet(req, resp);
		// 如果业务逻辑和GET方式不一样
		// do something...
	}
}

在index.jsp中添加

	<%-- 用相对路径访问Servlet3方式配置的Servlet --%>
	<a href="hello3?name=小二黑">HelloServlet3(相对路径)</a>

在浏览器地址栏中输入http://localhost:8080/06_servlet
在这里插入图片描述
在这里插入图片描述
3.0版本比之前的减少了在web.xml中配置,直接用注解的方式代替减少的代码的书写量,

POST请求

在index.jsp中写入代码

<h1>POST请求</h1>
	<form action="hello" method="post">
		用户名: <input type="text" name="name" /> <br />
		<input type="submit" value="提交" />
	</form>
	<form action="hello3" method="post">
		用户名: <input type="text" name="name" /> <br />
		<input type="submit" value="提交" />
	</form>

在浏览器地址栏中输入http://localhost:8080/06_servlet
在这里插入图片描述
servlet的执行流程如下图
在这里插入图片描述

测试作用域

创建ScopeServlet

package com.lanou3g;

import java.io.IOException;

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("/scopeServlet")
public class ScopeServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1762583971178468134L;

	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String name = req.getParameter("name");
		
		// 放到request、session、application作用域
		req.setAttribute("name", name);
		//session作用域
//		req.getSession().setAttribute("name", name);
		//application作用域
//		req.getServletContext().setAttribute("name", name);
		
		// 请求作用域中的数据必须使用请求转发(forward)的方式才能带过去
		req.getRequestDispatcher("result.jsp").forward(req, resp);
		// 请求重定向的方式无法将请求作用域数据带到页面
//		 resp.sendRedirect("result.jsp");
	}
	
}

在index.jsp中添加

<a href="scopeServlet?name=王二狗子">测试作用域</a>

再创建一个result.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="common/common.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet学习</title>
</head>
<body>

	<h1>${name },欢迎您!</h1>
	
</body>
</html>

在浏览器地址栏中输入http://localhost:8080/06_servlet
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值