JavaWeb学习笔记——servlet

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

1). 把开发选项切换到 JavaEE

2). 可以在 Window -> Show View中找到 Package Explorer,并把其拖拽到开发区的左边

3). Servers面板中新建 Tomcat服务器.一定要关联到 Tomcat安装的根目录

4). 新建一个 Dynamic Web Project.其中 Target Runtime需选择 Tomcat6.0

5). 开发 Java WEB应用

6). 可以通过 run on server  来运行WEB 项目.

 

2. 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.test.javaweb.HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

<!-- 需要和某一个 servlet节点的 serlvet-name子节点的文本节点一致 -->

<servlet-name>helloServlet</servlet-name>

<!-- 映射具体的访问路径: /代表当前 WEB应用的根目录. -->

<url-pattern>/hello</url-pattern>

</servlet-mapping>

 

3. Servlet 容器:运行 ServletJSPFilter等的软件环境.

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

2). JSP, Filter, Listener, Tag ...

 

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

1). 构造器:只被调用一次.只有第一次请求 Servlet, 创建 Servlet 的实例. 调用构造器.

这说明 Serlvet 的单实例的!

2). init 方法:只被调用一次.在创建好实例后立即被调用.用于初始化当前 Servlet.

3). service: 被多次调用.每次请求都会调用 service方法. 实际用于响应请求的.

4). destroy: 只被调用一次.在当前 Servlet所在的 WEB应用被卸载前调用.用于释放当前 Servlet所占用的资源.

 

5. load-on-startup 参数:

1).  配置在 servlet节点中:

 

<servlet>

<!-- Servlet 注册的名字 -->

<servlet-name>secondServlet</servlet-name>

<!-- Servlet 的全类名 -->

<servlet-class>com.test.javaweb.SecondServlet</servlet-class>

<!-- 可以指定 Servlet被创建的时机 -->

<load-on-startup>2</load-on-startup>

</servlet>

2). load-on-startup: 可以指定 Serlvet被创建的时机.若为负数,则在第一次请求时被创建.若为0 或正数,则在当前 WEB应用被

Serlvet 容器加载时创建实例,且数组越小越早被创建.

 

6. 关于 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>

 

OR

 

<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>

 

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

 

1). 配置 Serlvet的初始化参数

 

<servlet>

<servlet-name>helloServlet</servlet-name>

<servlet-class>com.test.javaweb.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的配置名称(了解)

 

8. ServletContext

 

1). 可以由  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

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/jdbc.properties");

. attribute 相关的几个方法:

 

9. GET 请求和 POST请求:

 

1). 使用GET方式传递参数:

 

. 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET

. 如果网页中的<form>表单元素的method 属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET

. 使用GET请求方式给WEB服务器传递参数的格式:  

 

http://www.test.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              --请求体中传递参数.

 

10. 如何在 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); //  /day_29/loginServlet

 

. 获取请求方式:

 

String method = httpServletRequest.getMethod();

System.out.println(method); //GET

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

 

String queryString = httpServletRequest.getQueryString();

System.out.println(queryString); //user=test&password=123456&interesting=game&interesting=party&interesting=shopping

 

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

  

   String servletPath = httpServletRequest.getServletPath();

   System.out.println(servletPath);  //  /loginServlet

   

. attribute 相关的几个方法:   

 

3). HttpServletRequest: SerlvetRequest的子接口.针对于 HTTP请求所定义.里边包含了大量获取 HTTP请求相关的方法.

 

4). ServletResponse: 封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现.

 

. *getWriter(): 返回PrintWriter 对象.调用该对象的 print()方法, 将把 print() 中的参数直接打印

到客户的浏览器上.

 

. 设置响应的内容类型: response.setContentType("application/msword");

 

. void sendRedirect(String location): 请求的重定向. (此方法为HttpServletResponse 中定义.)

 

-----------------------------------------------------------------------------

 

web.xml 文件中设置两个WEB 应用的初始化参数, user, password.

定义一个 login.html, 里边定义两个请求字段: user, password.发送请求到 loginServlet

在创建一个 LoginServlet, 在其中获取请求的user, password. 比对其和web.xml 文件中定义的请求参数是否一致

若一致, 响应 Hello:xxx, 若不一致,响应 Sorry: xxx  xxxuser.

 

-----------------------------------------------------------------------------

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet 是 JavaEE 规范中的一部分,是处理 Web 请求的组件。Servlet 运行在服务器端,能够接收客户端发来的请求,并给客户端响应结果。下面我们来看看 Servlet 的基本概念和使用方法。 ## 一、Servlet 的基本概念 ### 1.1 Servlet 的生命周期 Servlet 的生命周期包含以下三个阶段: - 初始化阶段(init):当 Servlet 实例化后,Web 容器会调用其 init() 方法进行初始化操作。在此阶段,Servlet 可以执行一些初始化操作,例如读取配置信息、建立数据库连接等。 - 请求处理阶段(service):当客户端发来请求时,Web 容器会创建一个线程调用 Servlet 的 service() 方法处理请求。在此阶段,Servlet 可以获取请求参数、处理请求并生成响应数据。 - 销毁阶段(destroy):当 Web 应用停止或 Servlet 被卸载时,Web 容器会调用 Servlet 的 destroy() 方法进行清理工作。在此阶段,Servlet 可以释放资源、关闭数据库连接等。 ### 1.2 Servlet 的配置 在使用 Servlet 时,需要在 web.xml 文件中进行配置。以下是一个 Servlet 的基本配置: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> ``` 其中,servlet-name 表示 Servlet 的名称,servlet-class 表示 Servlet 的类名,url-pattern 表示请求的 URL 匹配规则。 ## 二、Servlet 的使用方法 ### 2.1 编写 Servlet 编写 Servlet 有两种方法:一种是继承 HttpServlet 类,另一种是实现 Servlet 接口。这里以继承 HttpServlet 类为例: ```java public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 GET 请求 PrintWriter out = resp.getWriter(); out.println("Hello, world!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 POST 请求 PrintWriter out = resp.getWriter(); out.println("Hello, world!"); } } ``` 在 Servlet 中,doGet() 方法用于处理 GET 请求,doPost() 方法用于处理 POST 请求。通过调用 HttpServletResponse 对象的 getWriter() 方法可以向客户端返回响应数据。 ### 2.2 部署 Servlet 将编写好的 Servlet 部署到 Web 容器中,有两种方法:一种是将 Servlet 类打成 war 包放到 Web 容器的 webapps 目录下,另一种是通过 Eclipse 等开发工具将 Servlet 部署到 Web 容器中。部署完成后,可以通过访问 Servlet 的 URL 来测试 Servlet 是否正常工作。 ## 三、总结 本文介绍了 Servlet 的基本概念和使用方法。Servlet 是 Java Web 开发中非常重要的组件,掌握 Servlet 的使用方法对于 Java Web 开发人员来说是必不可少的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值