JavaEE必知必会第五讲-Servlet

5.1 什么是servlet

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

5.2 servlet配置

1.web.xml
2.注解配置(适合tomcat6.0以上)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
urlPattrens为必配置项

5.3 request和response对象

在Servlet中通过request对象可以取到jsp页面传过来的参数
新建一个登陆的login.jsp页面,使用表单,如果用户名与密码相同则跳转到main.jsp页面,否则输出登录失败
在这里插入图片描述
新建一个servlet,名为Login,URL 修改为Login.do
在这里插入图片描述
Login.java文件如下

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

/**
 * Servlet implementation class Login
 */
@WebServlet("/Login.do")
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		//通过request,获得jsp页面的两个参数,为登录行为做逻辑判断
		String userName=request.getParameter("username");
		String userPassword=request.getParameter("userpassword");
		if(userName.equals(userPassword))
		{
			//通过response,跳转到main
			response.sendRedirect("main.jsp");	
		}else {
			//通过response输出登陆失败
			response.setContentType("text/html; charset=utf-8");
			response.getWriter().write("登陆失败!!");
		}		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//doGet(request, response);
		response.setCharacterEncoding("utf-8");//解决中文乱码问题
		String userName=request.getParameter("username");
		String userPassword=request.getParameter("userpassword");
		if(userName.equals(userPassword))
		{
			//通过response,跳转到main
			response.sendRedirect("main.jsp");	
		}else {
			//通过response输出登陆失败
			response.setContentType("text/html; charset=utf-8");
			response.getWriter().write("登陆失败!!");
		}	

	}
}

通过以上的小demo,我们可以理解到request和response,分别是请求和返回
但是如果用户名和密码如果都为汉字的情况下,虽然可以登录成功,但是其传给服务器的值却是乱码,可以通过以下的两个方法
1.post方式解决中文乱码

response.setCharacterEncoding("utf-8");

注意将其放在获取参数之前,最前面才有效,以上针对post方法
2.get方式解决中文乱码

userName=new String (userName.getBytes("ISO-8859-1"),"utf-8");

ISO-8859-1是默认的编码方式

5.4 Servlet生命周期

引入
1、Servlet本质上是一个类,但是使用它的时候,你好像从来没有new出来过,那么它是什么时候被创建的呢?
2、Servlet都是继承自HttpServlet的,你写代码的时候会重写父类的若干个方法,如init,doGet,doPost等,你重写这么多方法,它们之间的执行顺序又是如何呢?
🙂嗯,带着以上两个问题进入生命周期的学习
Servlet整个生命周期的管理,是由Servlet容器(这里是Tomcat)
我们新建一个servlet来观察这几个函数的调用顺序,来学习servlet生命周期
在这里插入图片描述
代码块如下:

package com.iflytek.servlet;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ServletLifeCycleTest
 */
@WebServlet(
		urlPatterns = { 
				"/ServletLifeCycleTest", 
				"/ServletLifeCycleTest.do"
		}, 
		initParams = { 
				@WebInitParam(name = "testParam", value = "testParam")
		})
public class ServletLifeCycleTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletLifeCycleTest() {
        super();
        //构造函数,new
        System.out.println("cycletest:new");
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		  System.out.println("cycletest:init");
	}

	/**
	 * @see Servlet#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
		  System.out.println("cycletest:destroy");
	}

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		  System.out.println("cycletest:service");
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		  System.out.println("cycletest:doGet");
		//response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		  System.out.println("cycletest:doPost");
		//doGet(request, response);
	}

}

在这里插入图片描述
new->init->service(无论get、post,service都是先调用)->doget->destory
特点:
       1.不管是执行doGet还是doPost,service方法都会在其之前
       2.init、new 只调用一次,下次启动tomcat时才会重新调用
       3. 如果不重写service,且没有调用父类service,则不调用dopost、doget

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值