Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
Post/Get doGet()哪些是get方式呢?
form默认的提交方式
如果通过一个超链访问某个地址
如果在地址栏直接输入某个地址
ajax指定使用get方式的时候
doPost()哪些是post方式呢?
在form上显示设置 method="post"的时候
ajax指定post方式的时候
service()实际上,在执行doGet()或者doPost()之前,都会先执行service()
由service()方法进行判断,到底该调用doGet()还是doPost()
可以发现,service(), doGet(), doPost() 三种方式的参数列表都是一样的。
所以,有时候也会直接重写service()方法,在其中提供相应的服务,就不用区分到底是get还是post了。
中文问题在doPost()方法最开始加上
request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8");其中第一句是把获取到的参数转为UTF-8编码
第二句是把返回的相应设为UTF-8编码
在html中加上
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 跳转
首先在web目录下准备两个页面 success.html,fail.html
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); String name = request.getParameter("name"); String psw = request.getParameter("password"); System.out.println("name: "+name); System.out.println("password: "+psw); String html = null; if ("admin".equals(name) && "123456".equals(psw)) request.getRequestDispatcher("success.html").forward(request, response); else response.sendRedirect("fail.html"); }
服务端跳转 request.getRequestDispatcher("success.html").forward(request, response);服务端跳转可以看到浏览器的地址依然是/login 路径,并不会变成success.html
客户端跳转 response.sendRedirect("fail.html");可以观察到,浏览器地址发生了变化
原理 自启动有的时候会有这样的业务需求:
tomcat一启动,就需要执行一些初始化的代码,比如校验数据库的完整性等。
但是Servlet的生命周期是在用户访问浏览器对应的路径开始的。如果没有用户的第一次访问,就无法执行相关代码。
这个时候,就需要Servlet实现自启动 即,伴随着tomcat的启动,自动启动初始化,在初始化方法init()中,就可以进行一些业务代码的工作了。
方法
在web.xml中,相应的<Servlet>标签中加上<load-on-startup>10</load-on-startup>
取值范围是1-99
10表示启动顺序
如果有多个Servlet都配置了自动启动,数字越小,启动的优先级越高
给相应的Servlet补充一个方法
public void init(ServletConfig config){ System.out.println("init of hello servlet"); } 效果 request 常用方法request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)"
request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名"
```request.getQueryString()``: 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到(只适用于post)
request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
request.getRemoteHost(): 浏览器所处于的客户机的主机名
request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
request.getLocalAddr(): 服务器的IP地址
request.getLocalName(): 服务器的主机名