Web.18.Servlet的使用

一、jsp什么时候算是学完了?

在web项目中,如果想要达到那种最高境界,那么就要实现高内聚,低耦合,让jsp文件中没有java代码,为了达到这个要求,我们将会使用一下几种方法:

1、封装JavaBean

2、 操作集成到 doxx.jsp

3、使用JSTL标签,EL表达式 代替了 java遍历操作,取值

4、有一种专门的页面 doxx.jsp之包含java代码

二、什么是jsp?

本质上就是一个java文件

本堂课将要实现的功能就在下面:

  • 去除doxx.jsp

  • 新建java文件

  • 实现Servlet (接口)

  • 继承HttpServlet(类)

三、什么是servlet?

servlet是小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地,浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器

简单来说,servlet就是java提供的一个类,这个类能够接受前端网页发出的请求

四、servlet的生命周期?

为了后期的操作,我们可以首先在web开发的eclipse中建一个类并实现Servlet接口(导包导第一个)

一一一一一一一一一一一一一一一
提示:在实现Servlet接口后,必须重写接口中所有的方法

重写方法中,方法与含义:

init方法:(当你开了一家餐厅,餐厅服务员入职后就等于调用了这个初始化方法)

也就是相当于,

  1. 当请求第一次进来Servlet类时就会调用init初始化方法:
    在这里插入图片描述
  2. 所有的处理请求的java代码全部写到servlet方法中:
    在这里插入图片描述
  3. 当服务员开除时就调用了销毁的方法:
    注意:destroy方法:服务器被关闭或Servlet类被修改时就调用销毁方法
    在这里插入图片描述
    4.5. getServlet,getServelet方法:相当于服务员入职后,可以查看其配置或信息
    在这里插入图片描述

案例:使用servlet完成登录
——有以下两种方法
A.配置式开发:
一种就是上边提到的,编写一个类继承servlet接口并重写其中的五个方法,这种方法称为传统的开发模式(配置式开发),每次都要重写方法可能有些许麻烦~


代码的具体操作如下:

  1. 提供访问路径【web.xml】需要重启服务器,修改了web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>web20</display-name>
  
  <!-- web.xml 是整个项目的配置文件 -->
  <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 如果修改了这个,一定要重启服务器 -->

  <!-- 1.配置servlet -->
 
  <servlet>
          <!-- 给它去一个名字 -->
          <servlet-name>one</servlet-name>
          <!-- servlet-clas 需要填上类的全路径 -->
          <servlet-class>
com.zking.servlet.LoginServlet

          </servlet-class>
  </servlet>
  
  <!-- 2.配置servlet的访问路径 -->
  <!-- mapping 映射 -->
  <servlet-mapping>
  <!-- 对应的servlet的名字 -->
      <servlet-name>one</servlet-name>
      <!-- 给它配置一个访问的路径 -->
      <url-pattern>/login.do</url-pattern>
  </servlet-mapping>
</web-app>

  1. 编写用来实现登录请求的处理java类,相当于doLogin.jsp:
package com.zking.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
public class LoginServlet implements Servlet{//用来实现登录请求的处理
	
	//生命周期
	
	@Override//初始化
	public void init(ServletConfig arg0) throws ServletException {
		//第一次进来:当请求来到这个Servlet 就会调用init方法
		System.out.println("开始初始化");
	}
 
	@Override//得到配置
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}
 
	@Override//得到信息
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}
 
 
	@Override//服务
	public void service(ServletRequest req, ServletResponse resp)
	throws ServletException, IOException {
		
		HttpServletResponse response=(HttpServletResponse) resp;
		HttpServletRequest request=(HttpServletRequest) req;
 
		//---------------所有的的代码全部写到这个方法中
		req.setCharacterEncoding("utf-8");
		//取到用户数据
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		//响应对象?------取值方式不一样
		PrintWriter out = response.getWriter();
		
		//取session通过请求对象
		HttpSession session = request.getSession();
		//取application通过请求对象 context->容器(名字不一样)
		ServletContext application = request.getServletContext();
		
		//走数据库
		if(("root").equals(username)&&("root123").equals(password)) {
			//登录成功
			out.print("登陆成功");
		}else {
			//登录失败
			out.print("登录失败");
			
		}
		
	}
	
	@Override//销毁
	public void destroy() {//init 初始化
		//1.服务关闭了
		//2.这个类被修改了
		System.out.println("我销毁了");
	}
}

B.注解式开发:
另一种就是注解式开发,使用@注解,使用注解式开发模式来完成登录功能,相比前一种,这种模式不需要在拿域对象时进行强转了,减少了些代码:


具体代码如下:

1.编写实现登录请求的java类处理和配置servlet配置访问路径,都在同一个界面,代码量也减少了,编写一个自己的servlet类,并继承HttpServlet:

package com.zking.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletContext;
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 javax.servlet.http.HttpSession;
 
@WebServlet("/test.do")//直接填写访问路径
public class MyServlet extends HttpServlet{
	
	//不同的请求方式:
	//doGet	专门处理get请求
	//doPost 专门处理post请求
	
	//<a href="baidu.jsp">xx</a>【get】
	//location.href='baidu.jsp'【get】
	//表单get?post?【默认是get,可以改成post】
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//登录功能
		doPost(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//登录功能
		req.setCharacterEncoding("utf-8");
		//取到用户数据
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		resp.setCharacterEncoding("gb2312");
		//【utf-8】【gb2312】【big5】
		//响应对象?------取值方式不一样
		PrintWriter out = resp.getWriter();
		//取session通过请求对象
		HttpSession session = req.getSession();
		//取application通过请求对象 context->容器(名字不一样)
		ServletContext application = req.getServletContext();
		
		//走数据库
		if(("root").equals(username)&&("root123").equals(password)) {
			//登录成功
			out.println("登陆成功");
			resp.sendRedirect(password);
		}else {
			//登录失败
			out.println("登录失败");
			
		}
		
		
	}
}

2.在前端网页直接使用在上面类中配置好的访问路径:@WebServlet(“/test.do”)
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值