Servlet之javaweb应用(二)

一、 使用 JavaEE 版的 Eclipse 开发动态的 WEB 工程(JavaWEB 项目)

1). 把开发选项切换到 JavaEE
2). 可以在 Window -> Show View 中找到 Package Explorer, 并把其拖拽到开发区的左边
3). 在 Servers 面板中新建 Tomcat 服务器. 一定要关联到 Tomcat 安装的根目录
4). 新建一个 Dynamic Web Project(如果没有,下载Eclipse组件。或者去Eclipse官网下载Eclipse for javaEE IDE)。 其中 Target Runtime 需选择 Tomcat7.0 
5). 开发 Java WEB 应用
6). 可以通过 run on server  来运行 WEB 项目. 

二.、Servlet 的 HelloWorld

1). 创建一个 Servlet 接口的实现类. 

public class HelloServlet implements Servlet


2). 在 web.xml 文件中配置和映射这个 Servlet

 

<!-- 配置和映射 Servlet --><servlet><!-- Servlet 注册的名字 --><servlet-name>helloServlet</servlet-name><!-- Servlet 的全类名 --><servlet-class>com.mk.HelloServlet</servlet-class></servlet>	<servlet-mapping><!-- 需要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 --><servlet-name>helloServlet</servlet-name><!-- 映射具体的访问路径: / 代表当前 WEB 应用的根目录. --><url-pattern>/hello</url-pattern></servlet-mapping>

 

三、 Servlet 容器: 运行 Servlet、JSP、Filter 等的软件环境

1). 可以来创建 Servlet, 并调用 Servlet 的相关生命周期方法. 
2). JSP, Filter, Listener, Tag ...

四、Servlet 生命周期的方法: 以下方法都是由 Serlvet 容器负责调用.

1). 构造器: 只被调用一次. 只有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器. 
这说明 Serlvet 的单实例的!
2). init 方法: 只被调用一次. 在创建好实例后立即被调用. 用于初始化当前 Servlet. 
3). service: 被多次调用. 每次请求都会调用 service 方法. 实际用于响应请求的. 
4). destroy: 只被调用一次. 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源. 

五、  web.xml 文件中load-on-startup 参数

1).  配置在 servlet 节点中:

	<servlet><!-- Servlet 注册的名字 --><servlet-name>secondServlet</servlet-name><!-- Servlet 的全类名 --><servlet-class>com.atguigu.javaweb.SecondServlet</servlet-class><!-- 可以指定 Servlet 被创建的时机 --><load-on-startup>2</load-on-startup></servlet>

2). load-on-startup: 可以指定 Serlvet 被创建的时机. 若为负数, 则在第一次请求时被创建.若为 0 或正数, 则在当前 WEB 应用被
Serlvet 容器加载时创建实例, 且数字越小越早被创建

六、 web.xml 文件中serlvet-mapping

1). 同一个Servlet可以被映射到多个URL上,即多个 <servlet-mapping> 元素的<servlet-name>子元素的设置值可以是同一个
Servlet的注册名。 

2). 在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:
一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头或以“/*”结尾。*.扩展名这种形式优先级别最低

<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

注意: 以下的既带 / 又带"*.扩展名"的不合法. 

<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/*.action</url-pattern>
</servlet-mapping>

 

七、ServletConfig: 封装了 Serlvet 的配置信息, 并且可以获取 ServletContext 对象

1). web.xml 文件中配置 Serlvet 的初始化参数

<servlet><servlet-name>helloServlet</servlet-name><servlet-class>com.mk.HelloServlet</servlet-class><!-- 配置 Serlvet 的初始化参数。 且节点必须在 load-on-startup 节点的前面 --><init-param><!-- 参数名 --><param-name>user</param-name><!-- 参数值 --><param-value>root</param-value></init-param><init-param><param-name>password</param-name><param-value>1230</param-value></init-param><load-on-startup>-1</load-on-startup>
</servlet>


2). 获取初始化参数: 
  getInitParameter(String name): 获取指定参数名的初始化参数
  getInitParameterNames(): 获取参数名组成的 Enumeration 对象. 

   

String user = servletConfig.getInitParameter("user");
System.out.println("user: " + user);Enumeration<String> names = servletConfig.getInitParameterNames();
while(names.hasMoreElements()){String name = names.nextElement();String value = servletConfig.getInitParameter(name);System.out.println("参数" + name + ": " + value);
}

 

3). 获取 Serlvet 的配置名称(了解)

String getServletName(): 获取当前Servlet在web.xml中配置的名字

 

八、ServletContext

1). SerlvetContext获取

①.在javax.servlet.Filter中直接获取
   ServletContext context = config.getServletContext();
②.在HttpServlet中直接获取
  ServletContext context =this.getServletContext()
③.在其他方法中,通过HttpRequest获得
   ServletContext context =request.getSession().getServletContext();

④.在SerlvetConfig中获取

   ServletContext servletContext = servletConfig.getServletContext();


2). 该对象代表当前 WEB 应用: 可以认为 SerlvetContext 是当前 WEB 应用的一个大管家. 可以从中获取到当前 WEB 应用的各个方面的信息.

①. 获取当前 WEB 应用的初始化参数
设置初始化参数: 可以为所有的 Servlet 所获取, 而 Servlet 的初始化参数只用那个 Serlvet 可以获取. 

<!-- 配置当前 WEB 应用的初始化参数 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>

方法:
getInitParameter(String name)
getInitParameterNames()

代码:

ServletContext servletContext = servletConfig.getServletContext();String driver = servletContext.getInitParameter("driver");
System.out.println("driver:" + driver);Enumeration<String> names2 = servletContext.getInitParameterNames();
while(names2.hasMoreElements()){String name = names2.nextElement();System.out.println("-->" + name); 
}

②. 获取当前 WEB 应用的某一个文件在服务器上的绝对路径, 而不是部署前的路径
getRealPath(String path);
代码:

String realPath = servletContext.getRealPath("/note.txt");
System.out.println(realPath);

③. 获取当前 WEB 应用的名称
getContextPath()
代码:

String contextPath = servletContext.getContextPath();
System.out.println(contextPath); 

④. 获取当前 WEB 应用的某一个文件对应的输入流
getResourceAsStream(String path): path 的 / 为当前 WEB 应用的根目录
代码:

InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/file.properties");

⑤. 和 attribute 相关的几个方法:

添加属性:setAttribute(String name,Object ob);
获得到值:getAttribute(String):Object
删除属性:removeAttribute(String name)


九、GET 请求和 POST 请求

1). 使用GET方式传递参数:
①. 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。 
②. 如果网页中的<form>表单元素的 method 属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。 
③. 使用GET请求方式给WEB服务器传递参数的格式:  
http://www.mk.com/counter.jsp?name=lc&password=123
④. 使用GET方式传送的数据量一般限制在 1KB 以下。 

2). 使用 POST 方式传递参数:
①. POST 请求方式主要用于向 WEB 服务器端程序提交 FORM 表单中的数据: form 表单的 method 置为 POST
②. POST 方式将各个表单字段元素及其数据作为 HTTP 消息的实体内容发送给 WEB 服务器,传送的数据量要比使用GET方式传送的数据量大得多。  

POST /counter.jsp HTTP/1.1
referer: http://localhost:8080/Register.html
content-type: application/x-www-form-urlencoded
host: localhost:8080
content-length: 43

name=zhangsan&password=123              --请求体中传递参数. 

十、如何在 Serlvet 中获取请求信息

1). Servlet 的 service() 方法用于应答请求: 因为每次请求都会调用 service() 方法

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException


ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现. 

这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入. 


2). ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
①. 获取请求参数
> String getParameter(String name): 根据请求参数的名字, 返回参数值. 
若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值. 
> String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组. 
> Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象, 
类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法. 
> Map getParameterMap(): 返回请求参数的键值对: key: 参数名,  value: 参数值, String 数组类型. 
②. 获取请求的 URI:

HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestURI = httpServletRequest.getRequestURI();
System.out.println(requestURI); 

③. 获取请求方式

String method = httpServletRequest.getMethod();
System.out.println(method); //GET

④. 若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串. 

 

String queryString = httpServletRequest.getQueryString();
System.out.println(queryString); 
//user=mk&password=123456&interesting=game&interesting=party&interesting=shopping

 

⑤. 获取请求的 Serlvet 的映射路径 

String servletPath = httpServletRequest.getServletPath();
System.out.println(servletPath);  

⑥. 和 attribute 相关的几个方法 


3). HttpServletRequest: 是 SerlvetRequest 的子接口. 针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法. 
 
4). ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现. 
①. getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印
到客户的浏览器上. 
②. 设置响应的内容类型: response.setContentType("application/msword");
③. void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java流与文件——文本输入输出

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——文本输入输出 的相关知识&#xff1b; 0.2&#xff09; 在保存数据时&#xff0c;可以选择是二进制还是文本格式&#xff1b; 在存储文本字符串时&#xff0c; 需要考虑字…

RandomAccessFile类解析

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——RandomAccessFile类解析 的相关知识&#xff1b; 0.1&#xff09; 本文 转自&#xff1a; http://blog.csdn.net/akon_vm/article/details/7429245 &#xff0c; for com…

Servlet之Tomcat配置与启动(一)

一、 部署并启动 tomcat 服务器 1). 解压 apache-tomcat-7.0.11.zip 到一个非中文目录下 2). 配置一个环境变量 java_home(指向 JDK 安装的根目录) 或 jre_home 3). 通过双击 apache-tomcat-6.0.16\bin 目录下的 startup.bat, 启动服务器 4). 可以在浏览器中输入 localhost:8…

随机数生成器c语言,句子随机生成器-怎么用C语言生成随机数

为随机数生成器初始化一个种子值在易语言中使用什么命令名置随机数种子 ()‘调用格式&#xff1a; 〈无返回值〉 置随机数种子 (〔整数型 欲置入的种子数值〕) - 系统核心支持库->算术运算英文名称&#xff1a;randomize为随机数生成器初始化一个种子值&#xff0c;不同的种…

nsstring 空值比较_用比较器的nulls排序具有空值的列表

nsstring 空值比较你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何使用Java 8 Comparator.nullsFirst在列表中的项目很少为空时如何对项目列表进行排序&#xff0c;从而将null视为列表中的最小元素。 –什么是比较器 – nullsFirst方法在Comparator中做什么 –…

hibernate的Configuration和配置文件

一、hibernate的入口Configuration 在Hibernate中&#xff0c;Configuration是hibernate的入口。在实例化一个Configuration的时候&#xff0c;Hibernate会自动在环境变量&#xff08;classpath&#xff09;里面查找Hibernate配置文件hibernate.properties。如果该文件存在&…

单片机c语言6种开方,单片机快速开平方的算法

C语言中开平方的算法中要开平方的话,可以在头文件中加#include .然后调sqrt(n);函数即可.但在单片机中要开平方.可以用到下面算法:算法1:本算法只采用移位、加减法、判断和循环实现&#xff0c;因为它不需要浮点运算&#xff0c;也不需要乘除运算&#xff0c;因此可以很方便地运…

spring 配置只读事务_只读副本和Spring Data第3部分:配置两个实体管理器

spring 配置只读事务我们之前的设置可以正常工作。 我们现在要做的是进一步发展&#xff0c;并配置两个单独的实体管理器&#xff0c;而不会影响我们之前实现的功能。 第一步是将默认实体管理器配置设置为主要配置。 这是第一步 package com.gkatzioura.springdatareadreplic…

java流与文件——读写二进制数据(DataOutput + DataInput)

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——读写二进制数据&#xff08;DataOutput DataInput&#xff09;的相关知识&#xff1b; 0.2&#xff09; for complete my diy code, please visit https://github.com/p…

dsp课程设计c语言源码,DSP课程设计-基于C语言实现256点的FFT精选.pdf

DSP课程设计-基于C语言实现256点的FFT精选XX 大学J1111111 UNIVERSITYDSP 课 程 设 计基于CCS 的FFT 算法的C 语言实现和验证学院名称&#xff1a;专业班级&#xff1a;学 号&#xff1a;学生姓名&#xff1a;指导教师姓名&#xff1a;201 年 0 月 0 日一、 课程设计目的1.此次…

java 字符数组与字符串_用于字符串和数组的5种简单有效的Java技术

java 字符数组与字符串Java通常会排在前五种最流行的编程语言中&#xff0c;因此可以理解。 它是一种通用语言&#xff0c;非常容易学习&#xff0c;因为它是一种高级语言&#xff0c;并且可以满足许多用例。 由于这些原因&#xff0c;Java是一门很棒的语言&#xff0c;可以用来…

Hibernate之映射

一、映射文件 Hibernate在实现ORM功能的时候主要用到的文件有&#xff1a; 1、 映射类&#xff08;*.Java&#xff09; 描述数据库表的结构&#xff0c;表的字段映射为类的属性&#xff0c;表的记录映射为类的对象。 2、映射文件&#xff08;*.hbm.xml&#xff09; …

java流与文件——ZIP文档

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——ZIP文档 的相关知识&#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/cha…

单片机与gsm通信c语言,gsm模块如何与单片机通信?

51单片机与GSM模块实现通信1、检测串口线的好坏1)将串口线插在电脑上&#xff0c;用短路子短接串口的2脚和3脚2)打开串口调试助手3)点击自动发送&#xff0c;在自动发送的窗口中随便发个数据&#xff0c;看看能不能接收到若能接收到自己发的数据表示串口线是正常的&#xff0c;…

aws terraform_在AWS第1部分中使用Terraform自动缩放组:基本步骤

aws terraform因此&#xff0c;您想使用Terraform在AWS上创建一个自动缩放组。 以下是达到此目的的最少步骤。 在编写实际代码之前&#xff0c;应指定aws terraform提供程序以及provider.tf文件上的区域。 provider "aws" { version "~> 2.0" region …

java流与文件——java生成解压缩文件(夹)

【0】README 0.1&#xff09; 本文描述转自 http://blog.csdn.net/chenssy/article/details/9622171 &#xff0c; 旨在理解 java流与文件——java生成解压缩文件&#xff08;夹&#xff09; 的相关知识&#xff1b; 0.2&#xff09; for my diy source code, please visit h…

Java的系统Property

一、java 系统Properties修改 (1)System.getProperties()可以确定当前的系统属性,返回值是一个Properties; (2)System.load(String filename)加载文件中的属性Properties等同于&#xff1a;System.getProperties().load(String filename) (3)System.setProperties(Properties p…

android 发布最新系统更新包,安卓升级包(安卓补丁包更新)

安卓升级包(安卓补丁包更新)2021-02-08 15:39“固件升级”文石BOOX Android 6.0及以上型号都支持升级最新系统&#xff01;好消息&#xff01;截至今天&#xff0c;您在BOOX安卓6.0系统以上的所有阅读器型号&#xff0c;都支持升级到最新BOOX OS 2.3.1系统了&#xff01;?的设…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)

apache.camel我以前曾在博客中介绍过我们在下一个Camel 3.1版本中所做的优化 博客第1部分 博客第2部分 今天&#xff0c;我想简要介绍一下我们已经完成的最新开发&#xff0c;因为我们准备在本周末或下半年准备好构建和发布Camel 3.1。 从第2部分开始&#xff0c;我们设法在…

AVL树的单双旋转解析

【0】README 0.0&#xff09; 本文部分idea 转自&#xff1a;http://blog.csdn.net/collonn/article/details/20128205 0.1&#xff09; 本文专注于 解析 AVL 树的 单旋转&#xff08;左左单旋转和右右单旋转&#xff09; 和 双旋转&#xff08;左右双旋转和右左单旋转&#…