1.Web应用服务器,为每个客户端的连接启动一个线程来服务
2.第一次访问Servlet时,服务器将创建一个该Servlet类的对象,并调用doXXX方法生成响应;多个客户端访问同一个Servlet时,不再创建新的对象,而且共用同一个Servlet对象。可以说,Servlet是多线程单例的。
1.请求数据
通过浏览器给服务端的所有数据,称为请求数据
2.响应数据
通过服务器返回给客户端的所有数据,称为响应数据
3.Servlet API中,定义了请求接口和相应接口,用来封装和操作请求和响应数据
4.doXXX
服务器会创建请求对象和响应对象传递给doXXX方法,doXXX方法可以直接使用响应对象和请求对象
1.直接从地址栏输入URL访问
2.在网页中点击超级链接访问
<a href="http://localhost:8080/0428-web-servlet/TestServlet">Go servleta>
3.在网页中通过表单提交访问
<--没有指定method的表单,默认是get方式-->
<form action="http://localhost:8080/0428-web-servlet/TestServlet">
<input type="submit" value="提交"/>
form>
--指定method为post的表单,提交方式为post-->
<form action="http://localhost:8080/0428-web-servlet/TestServlet" method="post">
<input type="submit" value="提交"/>
form>
4.编写Servlet(doGet、doPost方法)
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置编码
response.setContentType("text/html;charset=UTF-8");
// 得到ip
String ip = request.getRemoteAddr();
// 输出ip
response.getWriter().print("您好,目前调用的是doGet方法,您的IP地址是:" + ip);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置编码
response.setContentType("text/html;charset=UTF-8");
// 得到ip
String ip = request.getRemoteAddr();
// 输出ip
response.getWriter().print("您好,目前调用的是doPost方法,您的IP地址是:" + ip);
}
总结:
1、直接使用URL访问,是GET方式,调用doGet方法;
2、超级链接访问,是GET方式,调用doGet方法;
3、表单提交访问,取决form的method属性的值,默认是get,指定为post时,调用doPost方法;
1.在url?name=value&name=value
直接在浏览器的地址栏输入url?name=value&name=value
2.form表单传递请求参数
当客户端请求服务器端的Servlet时,请求参数都会被发送到服务器,服务器Tomcat会将请求参数封装到请求对象request中
1.在浏览器的地址栏输入url?name=value&name=value,在servlet取得请求参数的值
//写一个TestParamServlet,用于接收请求参数name,age的值
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用请求对象的getParameter(name)方法得到请求参数的值
String name = request.getParameter("name");
String age = request.getParameter("age");
//把得到的请求参数的值显示出来
PrintWriter printWriter = response.getWriter();
printWriter.print("name="+name);
printWriter.print("age="+age);
}
<a href="/0428-web-servlet/TestParamServlet?name=zs&age=20">name和age请求参数a>
3.form表单传递请求参数
<form action="/0428-web-servlet/TestParamServlet" method="post">
姓名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
<input type="submit" value="提交"/>
form>
4.form表单传递同名的请求参数,在Servlet获取多个值
<form action="/0428-web-servlet/TestParamServlet" method="post">
姓名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
爱好:
<input type="checkbox" name="hobbies" value="吃"/>吃
<input type="checkbox" name="hobbies" value="喝"/>喝
<input type="checkbox" name="hobbies" value="玩"/>玩
<input type="checkbox" name="hobbies" value="乐"/>乐<br/>
<input type="submit" value="提交"/>
form>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求接收参数使用UTF-8编码进行解析,中文不会乱码
request.setCharacterEncoding("UTF-8");
//调用请求对象的getParameter(name)方法得到请求参数的值
String name = request.getParameter("name");
String age = request.getParameter("age");
String[] hobbies = request.getParameterValues("hobbies");
for (String string : hobbies) {
System.out.println(string);
}
response.setContentType("text/html;charset=UTF-8");
//把得到的请求参数的值显示出来
PrintWriter printWriter = response.getWriter();
printWriter.print("name="+name);
printWriter.print("age="+age);
}
1.server.xml配置参数:URIEncoding="UTF-8"
2.servlet:response.setContentType(“text/html;charset=UTF-8”);
1.servlet中:request.setCharacterEncoding(“UTF-8”);
2.servlet:response.setContentType(“text/html;charset=UTF-8”);
如果Servlet需要使用一些可以配置的参数,可以在创建Servlet时进行设置称为初始化参数;
1.一个Servlet可以配置多个初始化参数,
2.所有的初始化参数只能在当前Servlet类中使用;
web.xml中的servlet节点使用init-param进行设置
<servlet>
<description>description>
<display-name>TestInitParamServletdisplay-name>
<servlet-name>TestInitParamServletservlet-name>
<servlet-class>com.tjetc.servlet.TestInitParamServletservlet-class>
<init-param>
<param-name>nameparam-name>
<param-value>中软国际param-value>
init-param>
servlet>
直接在servlet中调用getInitParameter(name)就能够得到初始化参数的值
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = getInitParameter("name");
System.out.println(name);
response.getWriter().append("Served at: ").append(request.getContextPath());
}
在应用下的所有的servlet都能使用的参数称之为全局参数
在应用下的所有的servlet都能使用全局参数
web.xml的节点进行配置
<context-param>
<param-name>companyparam-name>
<param-value>中国移动公司param-value>
context-param>
ServletContext servletContext = getServletContext();
String company = servletContext.getInitParameter("company");
System.out.println(company);
在web.xml配置load-on-startup,代表在服务器Tomcat启动的时候就调用servlet的构造方法实例化servlet.这就是servlet的启动选项.
如果没有设置该选项,默认是在第一次访问servlet时调用servlet的构造方法实例化servlet.
在web.xml配置load-on-startup,
数值代表启动的顺序,越小越先启动
<servlet>
<description>description>
<display-name>TestLoadServletdisplay-name>
<servlet-name>TestLoadServletservlet-name>
<servlet-class>com.tjetc.servlet.TestLoadServletservlet-class>
<load-on-startup>1load-on-startup>
servlet>
要访问Servlet,必须为Servlet配置,可以使用通配符*进行配置,从而通配多种访问模式
可以配置多个.
1.*.扩展名 : 比如 .do、.action
在web.xml中url-pattern配置
<servlet-mapping>
<servlet-name>TestLoadServletservlet-name>
<url-pattern>*.actionurl-pattern>
servlet-mapping>
2.以 / 开头,同时以 / 结尾,比如 / 、/admin/***
<servlet-mapping>
<servlet-name>TestLoadServletservlet-name>
<url-pattern>/admin/*url-pattern>
servlet-mapping>
1.web.xml配置welcome-file-list->welcome-file
2.配置默认首页:当不指定具体访问路径时,默认访问默认首页
3.将按照顺序访问,都不存在将报404错误
<welcome-file-list>
<welcome-file>index.htmlwelcome-file>
<welcome-file>index.htmwelcome-file>
<welcome-file>index.jspwelcome-file>
<welcome-file>default.htmlwelcome-file>
<welcome-file>default.htmwelcome-file>
<welcome-file>default.jspwelcome-file>
welcome-file-list>
当应用中出现响应错误或者异常时,可以跳转到错误页面
web.xml配置 error-page
1.错误码
<error-page>
<error-code>404error-code>
<location>/404.htmllocation>
error-page>
2.异常类型
<error-page>
<exception-type>java.lang.NullPointerExceptionexception-type>
<location>/exception.htmllocation>
error-page>
1.Content-Length:获得请求长度
2.Accept:浏览器能接受的MIME(它全名叫多用途互联网邮件扩展(Multipurpose Internet Mail Extensions),最初是为了将纯文本格式的电子邮件扩展到可以支持多种信息格式而定制的。后来被应用到多种协议里,包括我们常用的HTTP协议。MIME的常见形式是一个主类型加一个子类型,用斜线分隔。比如text/html、application/javascript、image/png等。在访问网页时,MIME type帮助浏览器识别一个HTTP请求返回的是什么内容的数据,应该如何打开、如何显示)类型
3.Referer:来路路径,代表请求从哪个页面转过来的.