栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Web.20.Servlet的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Web.20.Servlet的使用

什么是servlet?


目录:

        什么是servlet?

        servlet的生命周期?

        案例:使用servlet完成登录

                配置式开发

                具体代码

                注解式开发

                具体代码


jsp什么时候算是学完了?

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

* 封装JavaBean

* 操作集成到 doxx.jsp

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

* 有一种专门的页面 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



  web20
  
 
 
    /index.jsp
 

  
 

 
 
 
          
          one
          
          
com.zking.servlet.LoginServlet

          
 
  
 
 
 
 
      one
      
      /login.do
 

  2. 编写用来实现登录请求的处理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("我销毁了");
	}
}

  3. 然后就可以在前端通过配置好的路径来进行传值了:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


<%
	request.getRequestDispatcher("/xx").forward(request, response);
%>
<%--
【编写自己的Servlet】
	1.干掉所有的doxxx.jsp页面
	2.编写java文件来代替doxxx.jsp
	3.Servlet 接口具备接收前端请求的功能
	
	传统的开发模式:配置式开发
	注解式开发:@注解
 --%>
 <%
	
 %>
	

 


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请求
	
	//xx【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")

  

  这堂课,我们主要就实现了将doXxx.jsp中的代码转移到.java文件中,用了配置式开发和注解式开发,两种方法,me觉得后者更为便捷哦~


 感谢观看!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/842976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号