当前位置: 首页 > news >正文

Servlet (1)

目录

实现功能:

class文件

知识点:

①ServletConfig

②ServletContext

③请求参数中带中文:

④getInitParameter(参数名)

⑤请求参数的获取:

⑥字符串.trim()

⑦字符串比较函数 equals()

 代码:

配置文件

知识点

① 

请求1:form action中的内容

 请求:括号括起来的test3

补充:请求的三种方式: 

①超链接,的href中写请求名

②浏览器地址栏写url   http://ip地址:端口/web应用的名称/请求名(patter-url)

③表单的中提交按钮,action中写请求名

 ②  Web应用的包名位置

③ 数字

④注意:

⑤中的*通配符,

⑥定义初始化变量:在外

 HTML文件:


实现功能:

servlet 在配置文件中设置来判断账号和密码,提交后账号和密码正确就欢迎,否则显示错误

class文件

知识点:

①ServletConfig

这是init()方法的参数,它可以获取当前servlet方方面面的信息

②ServletContext

表示整个web应用,它可以获取当前web应用方方面面的信息,我们可以通过ServletConfig对象调用getServletContext()得到该对象 

 ServletContext sc;
 @Overridepublic void init(ServletConfig servletConfig) throws ServletException {sc = servletConfig.getServletContext();}

上述函数体 sc被赋值为web应用方方面面信息的一个集合,它的类型是ServletContext类型

③请求参数中带中文:

我们需要通过ServletRequest对象调用setCharacterEncoding("UTF-8")转码

同时再调用setContentType("text/html")设置文本页面格式

ServletRequest 和 HttpServletRequest 接口详解-CSDN博客

         servletRequest.setCharacterEncoding("utf-8");servletResponse.setCharacterEncoding("utf-8");servletResponse.setContentType("text/html");

④getInitParameter(参数名)

根据参数获得当前Web应用的初始化参数值

String password = sc.getInitParameter("password");

⑤请求参数的获取:

我们通过ServletRequest对象调用getparameter(参数名得到数值)

参数名是HTML中name的属性

⑥字符串.trim()

去除空格

  String passwordParam = servletRequest.getParameter("password").trim();System.out.println(usernameParam);

⑦字符串比较函数 equals()

注意,把一定能取到的值,一般是初始化量.equals(),减少空指针异常

  if (username.equals(usernameParam) && password.equals(passwordParam)) {

 代码:

package com.iweb.test0801_b;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintWriter;public class ServletSecond implements Servlet {ServletContext sc;@Overridepublic void init(ServletConfig servletConfig) throws ServletException {sc = servletConfig.getServletContext();}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {servletRequest.setCharacterEncoding("utf-8");servletResponse.setCharacterEncoding("utf-8");servletResponse.setContentType("text/html");String username = sc.getInitParameter("username");//getInitParameter(参数名)——根据参数名获取当前servlet的初始化参数值String password = sc.getInitParameter("password");String usernameParam = servletRequest.getParameter("username").trim();String passwordParam = servletRequest.getParameter("password").trim();System.out.println(usernameParam);System.out.println(passwordParam);PrintWriter pw = servletResponse.getWriter();if (usernameParam.equals(username) && passwordParam.equals(password)) {pw.print("欢迎您" + usernameParam);} else {pw.print("账号或密码错误");}}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {System.out.println("第二个对象被销毁");}
}

配置文件

知识点

① <servlet-name>

<servlet-name>你想叫啥叫啥,就是这个Web的名字,和你Web应用的class名没关系</servlet-name>

和写在 html文件中的请求名一致

请求1:form action中的内容
<form  method="post" action="second">
 请求:括号括起来的test3
<a href="test3">test3</a>

补充:请求的三种方式: 

①超链接,的href中写请求名
②浏览器地址栏写url   http://ip地址:端口/web应用的名称/请求名(patter-url)
③表单的中提交按钮,action中写请求名

 ②  <servlet-class>Web应用的包名位置</servlet-class>

③ <load-on-startup>数字</load-on-startup>

控制当前servlet创建和初始化的时机,当取值为非负整数时,servlet对象会在TomCat启动的过程中进创建和初始化

注意:多个servlet创建和初始化的顺序是按照取值从小到大的顺序进行的

④注意:<servlet-mapping>

一个<servlet>可以对应多个<servlet-mapping>,使得当前java接收不同的请求

⑤<url-pattern>中的*通配符,

可以接收任意请求

(1)/*

(2)/

(3)*.后缀

比方说程序运行打开网址为:http://localhost:8088/test0801_b_war_exploded/

那么打开下面代码中写的second界面可以是:http://localhost:8088/test0801_b_war_exploded/任意字母数字符号.do

也可以是: http://localhost:8088/test0801_b_war_exploded/second002

<servlet><servlet-name>second</servlet-name><servlet-class>com.iweb.ServletSecond</servlet-class><load-on-startup>0</load-on-startup>
</servlet><servlet-mapping><servlet-name>second</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>second</servlet-name><url-pattern>/second002</url-pattern></servlet-mapping>

⑥定义初始化变量:在<servlet>外

 <context-param><param-name>username</param-name><param-value>root</param-value></context-param><context-param><param-name>password</param-name><param-value>123456</param-value></context-param>

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"<servlet><servlet-name>second</servlet-name><servlet-class>com.iweb.test0801_b.ServletSecond</servlet-class><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>second</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><context-param><param-name>username</param-name><param-value>root</param-value></context-param><context-param><param-name>password</param-name><param-value>123456</param-value></context-param></web-app>

 HTML文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户登陆</title>
</head>
<body>、
<h3>用户登陆</h3>
<form  method="post" action="hello">账号<input type="text" name="username"><br/><br/><br/>密码<input type="text" name="password"/><br/><br/><input type="submit" value="提交"/><br/>
</form>
<a href="hello?username=Tom&age=20">发起一个请求</a>
<br/>
<br/>
<a href="test3">test3</a>
<br/></body>
</html>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【2024】InfluxDB v2 介绍和安装使用(1)
  • Thread-Caching Malloc 简介
  • 第十九天内容
  • 君正T41开发板环境搭建_串口登陆_配置IP_telnet登陆_mount挂载_安装交叉编译工具链
  • Redis篇之持久化数据恢复
  • Native Programs(本机程序)
  • Python爬虫-中国汽车市场月销量数据
  • 服务器并发模型
  • 互联网家政小程序,为大众带来高效、便捷的服务
  • 多个线程同时调用接口
  • 【Canvas与艺术】六角大楼
  • Windows重装系统「统信UOS」+家庭版专业版选择
  • Python基础知识笔记——特殊符号
  • SQL常用函数
  • W1R3S靶机全通详细教程
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • es6要点
  • laravel 用artisan创建自己的模板
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • mysql中InnoDB引擎中页的概念
  • React-redux的原理以及使用
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue小说阅读器(仿追书神器)
  • 从重复到重用
  • 汉诺塔算法
  • 软件开发学习的5大技巧,你知道吗?
  • 使用 @font-face
  • 物联网链路协议
  • # Redis 入门到精通(一)数据类型(4)
  • # windows 安装 mysql 显示 no packages found 解决方法
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Matlab)使用竞争神经网络实现数据聚类
  • (SERIES12)DM性能优化
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot教学评价 毕业设计 641310
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (四)stm32之通信协议
  • (四)库存超卖案例实战——优化redis分布式锁
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET Core 中的路径问题
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET未来路在何方?
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • @Value读取properties中文乱码解决方案
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [Codeforces] probabilities (R1600) Part.1