java中servlet知识_Servlet基础知识总结

Servlet是JavaWeb应用开发的核心组件。Servlet运行在Servlet容器中(例如最常用的Tomcat),它可以为各种客户请求提供相应服务。Servlet可以轻松完成以下任务:

动态生成HTML文档(即服务端交互,动态页面)

把请求转发给同一个Web应用中的其他Servlet组件。

访问服务器资源(如数据库访问)

读取客户端的Cookie。

ServletAPI有4个包,如下:

javax.servlet :包含定义了Servlet与Servlet容器之间签约的类和接口。

javax.servlet.http : 包含定义了HttpServlet与与Servlet容器之间签约的类和接口。

javax.servlet.annotation :包含对Servlet、Filter和Listener进行标注的注解。即Servlet3.0的注解配置。

javax.servlet.descriptor:包含为Web应用的配置信息提供编程式访问的类型。

servlet包和servlet.tttp包之间主要接口和类的关系如下:

80cfc356269564f1bda13bcaffe8f763.png

678e447357ef6851dd36bda77e2dca61.png

Servlet的重点对象

请求对象(ServletRequest和HttpServletRequest) :Servlet获取请求头信息。

响应对象(ServletResponse和HttpServletResponse) :Servlet生成响应结果。

Servlet配置对象(ServletConfig):Servlet容器创建Servlet实例时,传入一个ServletConfig对象。 Servlet通过该对象来获取初始化参数及ServletContext对象。【初始化参数仅作用该Servlet本身】

Servlet上下文对象(ServletContext):Servlet容器启动Web应用时,创建唯一的ServletContext对象,即代表Web应用。 通过ServletContext对象可以共享web应用资源,可以用于在多个Servlet中共享数据。

【注意:Servlet容器启动时,JavaWeb应用会被启动,ServletContext对象随之创建】

Servlet接口的5个方法

init()       //创建servlet实例时,初始化servlet参数。

service()      //根据请求方式,处理客户端请求,并发出响应结果。

destroy()      //Web应用销毁(停止运行)时,执行该方法。通常用于回收资源。

getServletConfig() //返回一个ServletConfig对象,该对象表示Servlet配置信息。

getServletInfo() //返回关于该Servlet的说明信息。

Servlet生命周期

init()、service()和destroy()分别对应Servlet的三个阶段:初始化阶段、运行时阶段和销毁阶段。

对应如下的Servlet执行流程:当客户端向某个Web服务器发出请求,Tomcat(Servlet容器)接收并解析HTTP请求,然后调用匹配请求的Servlet类。

1.创建Servlet实例,执行init()完成初始化,Servlet容器传入一个ServletConfig对象。

2.根据请求方式,调用相应的响应方法(doGet()、doPost()或service()),传入包含请求信息的HttpServletRequest对象和用于响应的HttpServletResponse对象,生成响应结果。

3.Servlet容器将响应结果发送给客户端,然后执行destroy()方法,销毁和该Servlet有关的对象。例如请求对象、响应对象以及ServletConfig。至此,Servlet的生命周期结束。

额外说明: 创建Servlet实例有两种时机:

1.客户端发起请求,相应的Servlet实例才开始创建。2.Web应用一启动,就创建Servlet实例,这里方式需要配置一下:中配置1,值越小,实例化优先级越高。注解配置Servlet,指定参数loadOnStartup = 1。

关于Servlet初始化参数和Web应用的上下文参数的配置方式,在web.xml文件中:

   //使用注解配置初始化参数

                               @WebServlet(urlPatterns= {"/瞎写的URL"}, name="arbitrary",movement         initParams={10086   @WebInitParam(name="admin", value="牛批"),   @WebInitParam(name="info", value="10086")}railway)12306 public class InitParamServlet extendsHttpServlet{ //省略执行代码.....

}ServletConfig_Context_Test

com.test.ServletConfig_Context_Test

sevletConfig01

测试servlet配置信息

Servlet四个对象的常用方法说明

HttpServletRequest

获取请求参数 getParameter(),请求参数有多个值 getParameterValues()

获取单个请求头信息 getHeader() 获取所有请求头名称:getHeaderNames(),之后选择遍历。

获取和存取request范围中的数据, getAttribute(str, object) setAttribute(str, object)

省略其他方法...

HttpServletResponse

setContentType() 设置响应内容类型

setCharacterEncoding(arg0); 设置响应正文字符集

getWriter() 获取一个字符流,向响应正文中输出字符数据。 getOutputStream() 向响应正文中输出二进制数据

addCookie() 往响应正文中添加一个Cookie.

sendRedirect(url) 重定向

ServletConfig和ServletContext获取参数都是使用getInitParameter(),只不过一个是获取Servlet初始化参数,一个是Web应用参数。

注意:在Servlet中调用getServletConfig()和getServletContext()方法,需要在响应方法中获取,不然会导致空指针。若在方法外调用,则需要建立一个ServletConfig变量,执行init()时进行赋值,然后再通过建立的ServletConfig变量调用getServletContext(),

这样才不会导致NullPointerException

Servlet中四个作用域对象的范围

ServletContext对象,通过getServletContext()。范围在整个Web应用。 对应jsp的application对象

HttpSession对象,通过request.getSession()。范围在会话中。 对应jsp的session对象,Session很常用,要熟悉。

request对象,响应方法的参数直接提供。 范围在一次请求中。 对应jsp的request对象

this对象,当前Servlet类,范围仅限于类中。 对应jsp的page对象

上述作用域从大到小,Servlet和jsp的这些对象中都有一个Map集合,由setAttribute()和getAttribute()进行管理,可以将数据放到指定范围中。

Servlet的转发、包含和重定向

HttpServletRequest.getRequestDispatcher("URL").forward(request, response); //跳转到指定URL,本质上是将目标URL页面内容替换当前页面。

HttpServletRequest.getRequestDispatcher("URL").include(request, response); //把目标URL内容包含到当前URL页面内容中,等同于嵌入。

HttpServletResponse.sendRedirect(“URL”);//重定向到指定URL地址,会改变URL地址,相当于打开一个新网页。

使用说明:forward和include本质上只是对原URL地址页面做修改,所以URL地址不会改变,请求参数也不会丢失,请求对象依然有效。 而重定向是打开一个新URL地址,即二次请求。原有请求参数和请求对象全部失效!

上面的Servlet知识比较散乱,纯粹是个人总结。如需了解更多Servlet的细节知识,请自行查阅Serlvet资料。

下面使用Servlet来实现一些常用的网页功能

建立一个Servlet类很简单,继承HttpServlet抽象类就行。当然,你也可以实现Servlet接口或者继承GenericServlet抽象类,但HttpServlet抽象类已经帮我们实现了以上两个类,并扩展了响应请求方法,所以继承HttpServlet类是最优选择。

1.Servlet实现一个简单的登录信息验证

账号:
密码:

//处理请求的Servlet类,这里采用注解配置Servlet

@WebServlet(urlPatterns= {"/HandleFormServlet"}, name="arbitrary")public class HandleFormServlet extendsHttpServlet{

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

String user= req.getParameter("user");

String psw= req.getParameter("password");

resp.setContentType("text/html;charset=UTF-8");

resp.setCharacterEncoding("UTF-8");

PrintWriter pw= resp.getWriter(); //设置好响应内容类型和字符编码再获取输出流,避免中文乱码

pw.println("

");if(user!= null && user.equals("123456")) {if(psw!=null && psw.equals("tomcat")) {

pw.println("输入成功!欢迎登录……
");

pw.println("用户名:" + user + " 密码:" + psw + "
");

}else{

pw.println("密码输入错误");

}

}else{

pw.println("账号错误");

}

pw.println("");

}

}

输出结果:

184e272dd8304c65f85ac433d9562738.png 为了简洁,这里没有涉及到数据库,数据是死的。如有需求,可自行加入数据库访问,读取数据库中相关用户表信息,进行匹配。

2.Servlet实现一个简单的文件下载

3.Servlet实现一个简单的文件上传

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值