JavaWeb.servlet的基本使用方法详解

目录
  • 前言:
  • 一.实现servlet
  • 二.开发模式
  • 三.继承Servlet
  • 总结

前言:

我们在前几篇文章里的web项目都是用jsp文件完成的,那么什么时候jsp算是学完了呢?——在jsp文件中没有java代码。

在原来的doxxx.jsp文件里写的都是处理登陆或者主页面功能的java代码,现在我们需要servlet来代替doxxx.jsp文件。

一.实现servlet

我们可以一个登陆来当例子。

建一个com.xxx.servlet包,在写一个LoginServlet类

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author zjjt
 *用来实现登陆请求的处理
 */
public class LoginServlet implements Servlet{

	//生命周期

	@Override//初始化
	public void init(ServletConfig arg0) throws ServletException {
		//当请求来到这个servlet就会调用init方法
		System.out.println("开始初始化");
	}

	@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通过请求对象
		ServletContext application = request.getServletContext();
		//与数据库数据做对比
		if("root".equals(username)&&"root123".equals(password)) {
			//登陆成功
			//转发:req.getRequestDispatcher("/xx").forward(req, resp);
	        //重定向:需要强转响应
			//response.sendRedirect("/xx");
			out.println("登陆成功");
		}else {
			//登陆失败
			out.println("登陆失败");
		}
	}

	@Override//销毁
	public void destroy() {
		//什么时候销毁
		//1.服务关闭时
		//2.这个类被修改时
		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;
	}

}

 家人们注意了在代码里我使用了强转,是因为ServletRequest 和 ServletResponse 没有重定向功能,所有request(请求)和response(响应)取不到值。但是ServletRequest 和 ServletResponse的子类有重定向功能所有,我们要进行强转。

提供访问路径【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-class需要填上类的全路径 -->
    <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>

切记修改了web.xml的代码一定要重启服务器 

访问路径一定要加/,否则运行会报错

登陆界面代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- action里填配置的路径不需要加/ -->
<form action="login.do" method="post">
    <p><input type="text" name="username"></p>
    <p><input type="text" name="password"></p>
    <p><button>登陆</button></p>
</form>
</body>
</html>

这样我们的登陆就完成了,但是这样大家会不会觉得代码有点多,没关系,还有其他方法。

二.开发模式

我们的开发模式有两种,一种是(传统的开发模式)配置式开发,另一种是注解式开发。我们上面所讲的就是配置式开发,接下来我们来讲一讲注解式开发~( ̄▽ ̄)~*。

注解式开发使用的是@注解,在代码中@WebServlet就等于web.xml里的

在@WebServlet后面加上(),在里面直接填入路径,例如@WebServlet("/xxx")就等于web.xml里的

三.继承Servlet

使用注解式开发的方法我们就可以不用修改web.xml代码了,是不是简单多了(●'◡'●)。接下来我们写一个MyServlet文件,写Servlet有两种方法,一种式实现,另一种是继承。实现的方法我们已经写过了,接下来我们使用继承的方法

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;
/**
 *
 * @author zjjt
 *
 */
@WebServlet("/test.do")//直接填访问路径
public class MyServlet extends HttpServlet{

	//不同的请求方式:
	//doGet 专门处理get请求
	//doPost 专门处理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");
		//支持中文的编码【utf-8】【gb2312】【big5】
		req.setCharacterEncoding("gb2312");
		//通过响应对象获得输出对象
		PrintWriter out = resp.getWriter();
	    //通过请求对象取session,需要强转请求
		HttpSession session = req.getSession();
		//取application通过请求对象
		ServletContext application = req.getServletContext();
		//与数据库数据做对比
		if("root".equals(username)&&"root123".equals(password)) {
			//登陆成功
			//转发:req.getRequestDispatcher("/xx").forward(req, resp);
	        //重定向:需要强转响应
			//response.sendRedirect("/xx");
			out.println("登陆成功");
		}else {
			//登陆失败
			out.println("登陆失败");
		}
	}
}

家人们有发现实现和继承servlet有什么区别了吗

我相信细心的家人们应该已经发现了我这里继承的是HttpServlet而不是Servlet。这是因为HttpServlet是它的子类,具有重定向功能,这下我们又可以省去强转的部分了。所有我推荐大家使用注解式开发模式和继承Servlet的方式来写Servlet哟~

总结

到此这篇关于JavaWeb.servlet基本使用的文章就介绍到这了,更多相关JavaWeb.servlet使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaWeb中Servlet的深入理解

    1.servlet:定义: 接口 2.配置servlet: public class HelloServlet extends HttpServlet {} HttpServlet 固定的 IDEA配置v好了 类 package com.example.demo1; import java.io.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(name = "helloServlet&q

  • javaweb servlet生成简单验证码

    本文实例为大家分享了javaweb servlet生成验证码的具体代码,供大家参考,具体内容如下 package com.serv; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.s

  • JavaWeb中Servlet的深入讲解

    Servlet 1 Servlet 简介 Servlet就是Sun 公司开发动态web的一门技术 Sun在这些API中提供一个接口叫做:Servlet ,如果你向开发一个Servlet程序,只需要完成两个小步骤 编写一个类,实现Servlet接口 把开发好的Java类部署到web服务器中 把实现Servlet接口的Java程序叫做 Servlet 2 HelloServlet 构建一个普通的Maven项目,删除里面的src目录.这个空的工程就是Maven主工程 关于Maven父子工程的理解: 父

  • JavaWeb之Servlet注册页面的实现示例

    Servlet-注册页面 环境准备: 本文所用到环境如下: 软件:Eclipse(2018) 服务器:Tomcat 9 在index.jsp添加相关的代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 T

  • JavaWeb Servlet实现文件上传与下载功能实例

    目录 前言 项目准备 文件上传 前台页面 文件下载 资源准备 超链接下载 后台实现下载 总结 前言 在上网的时候我们常常遇到文件上传的情况,例如上传头像.上传资料等:当然除了上传,遇见下载的情况也很多,接下来看看我们 servlet 中怎么实现文件的上传和下载. 项目准备 idea:2020.1 jdk:1.8 tomcat:10 项目模板:java Enterprise–>Web Application 文件上传 文件上传涉及到前台页面的编写和后台服务器端代码的编写,前台发送文件,后台接收并保

  • Javaweb动态开发最重要的Servlet详解

    目录 一.导入方式 二.Servlet生命周期 三.继承HttpServlet GET&POST 四.Servlet相关性质(八股文) 五.Request&Response 1.HttpServletRequest 2.HttpServletResponse 六.请求转发模型 七.请求重定向 一.导入方式 由于jdk中没有servlet对应的jar包,所以需要咱们手动引入,有两种方式: 1.可以采取向lib目录导入servlet-api的jar包的方式 2.在maven项目中设置如下坐标,

  • JavaWEB中Servlet的生命周期详解

    目录 一.什么是Servlet 生命周期? 二.Servlet 是由谁来维护的? 三.Servlet 对象 是什么时候创建的? 四.测试 Tomcat 什么时候被销毁? 总结 一.什么是Servlet 生命周期? Servlet 对象什么时候被创建? Servlet对象什么时候被销毁? Servlet 对象创建了几个? Servlet 对象的声明周期表示:Servlet 对象从出生到销毁的过程是怎样的 二.Servlet 是由谁来维护的? Servlet 是由 Tomcat 服务器全权负责的,程

  • JavaWeb案例讲解Servlet常用对象

    概述 本次文章基于第三章的ServletConfig,ServletContext,HttpServletRequest,HttpServletResponse对象完成一个图书订阅系统的购买图书和查看图书购买记录功能. 搭建项目主页面 创建一个动态网站项目,在src中新建包com.book.servlet. 在包中,新建HomeServlet作为主页.效果图如下: 为了让一访问项目根路径地址就默认进入HomeServlet,这里需要将 HomeServlet的虚拟地址写入web.xml文件中作为

  • JavaWeb.servlet的基本使用方法详解

    目录 前言: 一.实现servlet 二.开发模式 三.继承Servlet 总结 前言: 我们在前几篇文章里的web项目都是用jsp文件完成的,那么什么时候jsp算是学完了呢?——在jsp文件中没有java代码. 在原来的doxxx.jsp文件里写的都是处理登陆或者主页面功能的java代码,现在我们需要servlet来代替doxxx.jsp文件. 一.实现servlet 我们可以一个登陆来当例子. 建一个com.xxx.servlet包,在写一个LoginServlet类 package com

  • JavaWeb Servlet中Filter过滤器的详解

    JavaWeb Servlet中Filter过滤器的详解 1.简述 Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制.过滤敏感词汇.压缩响应信息).Filter能够对Servlet容器的请求和响应进行检查和修改,其本身不能生成请求request和响应response,只提供过滤作用(Servlet被调用之前检查Request对象修改其相关信息,Servlet被调用后检查Response修改其相关信息),Filter对象常驻服务器. 2.Lifecyc

  • SpringBoot注册Servlet的三种方法详解

    本文栈长教你如何在 Spring Boot 注册 Servlet.Filter.Listener. 一.Spring Boot 注册 Spring Boot 提供了 ServletRegistrationBean, FilterRegistrationBean, ServletListenerRegistrationBean 三个类分别用来注册 Servlet, Filter, Listener,下面是 Servlet 的示例代码. import javax.servlet.http.HttpS

  • Javaweb中Request获取表单数据的四种方法详解

    目录 表单代码 request.getParamter(String name);通过name获取值 request.getParamterValues(String name);通过name获取value值(一般用于复选框获取值) 代码片段 request.getParameterNames();直接获取表单所有对象的name值,返回值是枚举集合 request.getParameterMap();直接获取表单所有对象的name值以及数据 表单代码 <!DOCTYPE html> <h

  • JavaWeb三大组件之一的Filter详解

    目录 1. 概念 2. 基本使用 3. 生命周期 4. FilterConfig类 5. FilterChain类 6. 拦截路径 7. ThreadLocal+Filter管理事务 7.1 ThreadLocal 7.2 MySQL事务前提 7.3 Filter统一管理 7.4 错误信息展示 1. 概念 Filter过滤器是JavaWeb的三大组件之一.三大组件:Servlet,Listener,Filter Filter过滤器是JavaEE的规范,即接口 作用:拦截请求,过滤响应 拦截请求常

  • Servlet映射路径匹配解析详解

    目录 开头 源码 精确匹配 通配符匹配 (路径匹配) 扩展名匹配(后缀匹配) 首页welcome资源匹配 默认匹配 开头 servlet是javaweb用来处理请求和响应的重要对象,本文将从源码的角度分析tomcat内部是如何根据请求路径匹配得到处理请求的servlet的 假设有一个request请求路径为/text/servlet/get,并且在web.xml中配置了4个servlet,代码如下,那么该请求调用的是哪一个servlet呢? <servlet> <servlet-name

  • AJAX实现JSON与XML数据交换方法详解

    目录 1.JS中如何创建和访问JSON对象 2.基于JSON的数据交换 3.基于XML的数据交换 1.JS中如何创建和访问JSON对象 (1)在javascript语言中怎么创建一个json对象,语法是什么? "属性名" : 属性值,"属性名" : 属性值.........的格式! 注意:属性值的数据类型随意:可能是数字,可能是布尔类型,可能是字符串,可能是数组,也可能是一个json对象..... <!DOCTYPE html> <html lan

  • JavaWeb中过滤器Filter的用法详解

    目录 过滤器Filter 处理顺序 使用场景 自定义过滤器 源码分析 FilterDef FilterMap 初始化过滤器 创建过滤器链 ApplicationFilterChain 执行过滤器链 过滤器Filter 过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理.过滤器可以对request进行处理也可以对response进行处理. 处理顺序 如果过滤器链顺序如上图所示,那么对request请

  • Java 读取外部资源的方法详解及实例代码

    Java 读取外部资源的方法详解 在Java代码中经常有读取外部资源的要求:如配置文件等等,通常会把配置文件放在classpath下或者在web项目中放在web-inf下. 1.从当前的工作目录中读取: try { BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("wkdir.txt"))); String str; while ((str = in.readLine())

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

随机推荐