JAVA——J2EE之Servlet 基础篇(一)

本文详细介绍了Servlet的开发过程,包括指定项目输出到classes目录、Servlet的调用流程、doGet和doPost方法、中文问题处理、生命周期、服务端与客户端跳转、自启动配置以及REQUEST和RESPONSE的常用方法。通过示例展示了如何处理中文参数、如何进行文件上传,以及在web.xml中的配置。文章旨在帮助读者深入理解Servlet的基础知识和实践操作。
摘要由CSDN通过智能技术生成

一、开发Servlet

Servlet 本身不能独立运行,需要在一个web应用中运行的
而一个web应用是部署在tomcat中的

所以开发一个servlet需要如下几个步骤
创建web应用项目
编写servlet代码
部署到tomcat中

开发的IDE也有各种选择,有的使用MyEclipse,有的使用eclipse 的EE版本,有的使用IDEA开发。

本例使用Eclipse EE版 结合独立的 tomcat进行一次java普通项目的创建

这样做的好处是,通过最原始的方式创建一个web应用,可以掌握最基本的知识。

必读: 基于Tomcat的程序要成功运行,对于配置文件的正确性有着苛刻的要求,任何一个地方出错了,都会导致运行失败。 如果你是第一次学习本教程,务必严格按照教程的指导,完全模仿操作,直到成功看到运行效果。 第一次成功之后,信心,思路都会有较好的铺垫,然后再根据自己的疑惑,在“成功”的代码上做原本想做的改动和调整,这样可以大大节约学习的时间,提高效率,切勿一来就擅自改动,给自己的学习制造障碍

指定项目输出到classes目录

首先在WEB-INF下创建classes目录

把项目的class文件输出由原来的 j2ee/bin 设置到 j2ee/web/WEB-INF/classes下

步骤:
项目右键->properties->Java Build Path->Source->右下角的 Brower-> 指定位置是 j2ee/web/WEB-INF/classes。

为什么要有这一步? 在ecilpse中默认输出的class是在bin目录下,但是tomcat启动之后,在默认情况下,不会去bin目录找这些class文件,而是到WEB-INF/classes这个目录下去寻找。 所以通过这一步的配置,使得eclipse的class文件输出到WEB-INF/classes目录下,那么这样就和tomcat兼容了。

SERVLET 基础 调用流程

这里写图片描述
首先访问html文件,不加html是不行滴,那就变成直接访问

有.html后缀请求的就是硬盘上的静态文件, 不带后缀请求的就是Servlet, 这时才会创建相应的servlet对象(如果是第一次请求此servlet的话)

http://127.0.0.1/login.html

打开一个静态的html页面,在这个页面中可以通过form,以post的形式提交数据

2./login路径

在上一步的login.html中,用form,把账号和密码,提交到/login这个路径,并且附带method=”post”

3.找到对应的Servlet

tomcat接受到一个新的请求:

http://127.0.0.1/login

其路径是/login,接着就到配置文件web.xml进行匹配发现/login对应的Servlet类是 LoginServlet
接下来的工作,就会基于这个LoginServlet进行。

4.实例化Servlet对象

Tomcat 定位到了LoginServlet后,发现并没有LoginServlet的实例存在,于是就调用LoginServlet的public无参的构造方法LoginServlet()实例化一个LoginServlet对象以备后续使用

5.调用doGet或者doPost

Tomcat从上一步拿到了LoginServlet的实例之后,根据页面login.html提交信息的时候带的method=”post”,去调用对应的doPost方法

6.request获取参数

接着流程进入了doPost方法中,

protected void doPost(HttpServletRequest request, HttpServletResponse response){
...
}

在这个方法中,通过参数request,把页面上传递来的账号和密码信息取出来

String name = request.getParameter("name");
String password = request.getParameter("password");

7.response设置响应

接着,根据账号和密码是否正确(判断是否是admin和123), 创建不同的html字符串

然后把html字符串通过如下方式,设置在了response对象上。

意味着response对象上有个输出流?

PrintWriter pw = response.getWriter();
pw.println(html);

到这里,Servlet的工作就做完了。

8.tomcat把html传递给浏览器

在Servlet完成工作之后,tomcat拿到被Servlet修改过的response,根据这个response 生成html 字符串,然后再通过HTTP协议,这个html字符串,回发给浏览器,浏览器再根据HTTP协议获取这个html字符串,并渲染在界面上。

这样在效果上,浏览器就可以看到Servlet中生成的字符串了。

二、DOGET方法 DOPOST方法 SERVICE方法

doGet()

当浏览器使用get方式提交数据的时候,servlet需要提供doGet()方法
哪些是get方式呢?

form**默认**的提交方式
如果通过一个超链访问某个地址
如果在地址栏直接输入某个地址
ajax指定使用get方式的时候

doPost()

当浏览器使用post方式提交数据的时候,servlet需要提供doPost()方法
哪些是post方式呢?

form上显示设置 method=”post”的时候
ajax指定post方式的时候

service()

LoginServlet继承了HttpServlet,同时也继承了一个方法

service(HttpServletRequest , HttpServletResponse )

实际上,在执行doGet()或者doPost()之前,都会先执行service()

由service()方法进行判断,到底该调用doGet()还是doPost()

可以发现,service(), doGet(), doPost() 三种方式的参数列表都是一样的。

所以,有时候也会直接重写service()方法,在其中提供相应的服务,就不用区分到底是get还是post了。

比如把前面的登录的LoginServlet,改为提供service方法,也可以达到相同的效果

三、中文问题

获取中文的参数

为了成功获取中文参数,需要做如下操作
1. login.html中加上

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

这句话的目的是告诉浏览器,等下发消息给服务器的时候,使用UTF-8编码

  1. login.html
    form的method修改为post

  2. 在servlet进行解码和编码

byte[] bytes= name.getBytes(“ISO-8859-1”);
name = new String(bytes,”UTF-8”);

先根据ISO-8859-1解码,然后用UTF-8编码
这样就可以得到正确的中文参数了

这样需要对每一个提交的数据都进行编码和解码处理,如果觉得麻烦,也可以使用一句话代替:

request.setCharacterEncoding("UTF-8"); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值