Servlet
一、servlet简介:
java Servlet 是运行在服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。
web服务器端的编程技术。
是继承了javax.servlet.http.HttpServlet类的Java类。
由支持servlet的web服务器(tomcat)调用和启动运行。
一个servlet负责对应的一个或一组url的访问请求,并返回相应的响应内容。
二、创建servlet步骤:
步骤一:编写servlet类
(1)通常我们的servlet类需要继承于超类javax.servlet.http.HttpServlet。(子类继承使子类拥有了超类的功能,然后程序员只需要修改个别具体方法,
即覆盖Override超类的某些方法)。可以覆盖的方法有:doGet(),doPost(),service(), init() ,destory()等等
注:
1、一旦我们的类写了service()方法,即它会覆盖超类HttpServlet的service()方法,
因为service()可以应付get、post请求,那么我们即便定义了doGet()和doPost()这两个方法也不会被调用,即
service()优于doGet()和doPost()。
2、超类HttpServlet的doGet()、doPost()的默认处理是返回一个405的http状态码以及一个报错信息页面,
因此我们自己的doGet()和doPost()不要去调用super.doGet()或super.doPost(),否则浏览器将看到的是这个报错信息
页面。其实,超类返回的这个错误页的作用是为了提醒我们要定义自己的doGet()、doPost()方法。因为如果我们自己没定
义doGet()、doPost(),系统就会选择超类的方法来调用而返回405报错页面。
(2)我们的servlet类还可以覆盖超类的init()和destroy()方法,init()主要做一些初始化工作,而destroy()主要做释放
资源等事情。
实例化:Servlet容器创建servlet实例。
init():默认情况下,第一次访问servlet的时候被调用(该servlet被初始化),只调用一次。
service():每次访问都会调用该方法。
destroy():销毁实例之前调用,比如服务器关闭的时候调用(该servlet被销毁).
步骤二:配置路由
当用户提交来url请求,应用程序要决定用哪个java类来处理这个请求,即指定url到java类的对应关系。
这是通过在web.xml中用的<servlet>元素和<servlet-mapping>元素完成的,如下示例:
这个配置即是指当用户输入的url是“/login”时,系统就会使用名为“LoginServlet”的servlet类来响应,
而它对应的类全名是“com.yy.servlet.web.servlet.LoginServlet”,因此系统就会调用这个LoginServlet类的相应方法
去处理请求并输出响应内容。
步骤三:
在浏览器中输入对应的URL,即可访问。
常见的几个错误:
404:资源加载错误,这个情况很可能是路径的问题
500:服务器内部错误。
405:我们自己没定义doGet()、doPost(),系统就会选择超类的方法来调用而返回405报错页面。
三、Servlet的生命周期:
服务器接收到http请求之后,会把请求信息封装成HttpServletRequest对象和HttpServletResponse对象。
当第一次访问servlet时,服务器会加载这个servlet类,创建对象,调用其init方法(初始化),然后调用服务
方法(如果是get请求,就调用doGet方法,如果是post请求,就调用doPost方法)。此后的每次对servlet的访问,
服务器都不再调用init方法而只调用服务方法。当要卸载Servlet时(如重新发布新代码到服务器),或要关闭服
务器时,就先调用destroy方法,其中一般主要做释放资源之类的事情。
四、servlet内置对象:
1、request:
表示HttpServletRequest对象,它包含了有关浏览器请求的信息,并且提供了几个用于获取
cookie, header,和session数据的有用的方法。
request这个内置对象代表浏览器向服务端提交来的请求,封装了大量数据,是个大对象。
常用的几个重要方法:
1.String getParameter(String name) 根据页面表单组件名称获取页面提交数据
2.String[ ] getParameterValues(String name)获取一个页面表单组件对应多个值时的用户的请求数据
3.void setCharacterEncoding(String charset) 指定每个请求的编码,在调用getParameter( )之前进行设定,可以解决中文乱码问题
4.String getRemoterAddr() 返回提交请求的客户机的IP地址
比如:
reqsetCharacterEncoding("UTF-8");
String username = new String(username.getBytes("ISO-8859-1"),"UTF-8"); 将字节用UTF-8码表 解码回中文
2、response:
表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)。
常用的几个方法:
1、response.setCharacterEncoding("UTF-8");//设置response编码
2、response.setContentType("text/html");//设置文本格式为html
3、response.sendRedirect("url");//设置页面重定向
3、out:
out内置对象主要用于向客户端输出文本信息。
out对象有print() 方法和write()方法,但是print()支持的参数类型更丰富,因而常用它。
out内置对象是 javax.jsp.JspWriter类的对象,具有输出的方法。
response对象并没有诸如writer()方法,但它能通过getWriter()来得到一个java.io.PrintWriter对象后,使用这个对象进行输出。
今天暂时学习这些,jsp servlet的内容还有很多后面慢慢补充。。。