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 中定义.)

时间: 2024-10-14 10:03:36

Servlet之javaweb应用(二)的相关文章

JavaWeb 后端 &lt;二&gt; 之 Servlet 学习笔记

JavaWeb 后端 <二> 之 Servlet 学习笔记 一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException ServletRequest req:代表着请

servlet必知细节(二)--servlet执行过程

servlet必知细节(二)--servlet执行过程 我们知道,servlet没有main函数,那么,servlet是怎么调用的呢? 实际上,servlet 是由tomcat调用的,tomcat调用servlet程序执行. 由调用栈可以看到,当一个请求过来时,Bootstrap类的main方法调用. 当用户在客户端发起url请求 :http://localhost/servletDemo/hello的时候,servlet的执行过程是怎样的? 上面学习,如果有错误,希望大家提出,共同提高,谢谢!

JavaWeb学习 (二十四)————Filter(过滤器)常见应用

一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 1 package me.gacl.web.filter; 2 3 import java.io.IOException; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.FilterConfig; 7 import javax.servlet.Serv

JavaWeb学习 (二十五)————监听器(Listener)

一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 1.2.监听器案例--监听window窗口的事件监听器 1 package me.gacl.listener.demo; 2 3 import java.awt.Fram

JavaWeb学习 (二十七)————监听器(Listener)在开发中的应用

监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听器技术来实现这个功能了. 1 package me.gacl.web.listener; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.http.HttpSessionEvent; 5 import javax.ser

【Servlet】Javaweb中获取任意个参数

总有这样的情况,传递到后台处理方法的参数数目不知道. 比如某个前台以前要传递给getAllParameter这个Servlet的参数位置.而又要再Servlet对不定长的参数进行一一分解,这该怎么办呢? 下面做一个简单的Javaweb工程来说明这个问题,整个Javaweb工程就getAllParameter.java这个Servlet 如下图所示,无论传递给getAllParameter这个Servlet多少个参数, getAllParameter这个Servlet都一一能够将其输出. 这时候关

Servlet学习笔记(二):HTTP请求与响应

一.HTTP请求常用方法: Cookie[] getCookies()返回一个数组,包含客户端发送该请求的所有的 Cookie 对象. Enumeration getAttributeNames()返回一个枚举,包含提供给该请求可用的属性名称. HttpSession getSession()返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个. HttpSession getSession(boolean create)返回与该请求关联的当前 Htt

JavaWeb学习(二)---Tomcat服务器学习和使用(一)

本文整理自孤傲苍狼大大的博客,,, 一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改 例如:将Tomcat服务器的启动端口由默认的8080改成8081端口 Tomcat服务器启动端口默认配置 1 <Connector port="8080" protocol="HTTP/1

基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能

本案例的技术选型主要是jsp+servlet+JavaBean,采用三层架构的分层思想与MVC设计模式结合进行规范开发. 采用的数据库是MySQL,并且搭配数据源连接池DBCP和apache官方提供的DBUtils进行数据库连接开发. 目的是为了简化SQL连接编码,并且提高连接数据库的性能. 本案例代码不含有Css和Js效果,如需要完整代码,访问:https://download.csdn.net/download/kese7952/107028 DBUtils的组件官方最新下载地址:http: