第二章:Servlet入门
第1节:Servlet入门
知识点1:Servlet线程特性
1.Web应用服务器,为每个客户端的连接启动一个线程来服务
2.第一次访问Servlet时,服务器将创建一个该Servlet类的对象,并调用doXXX方法生成响应;多个客户端访问同一个Servlet时,不再创建新的对象,而且共用同一个Servlet对象。可以说,Servlet是多线程单例的。
知识点2:请求和响应接口
Web应用基于HTTP协议,HTTP协议基于请求/响应模型**
1.请求数据
通过浏览器给服务端的所有数据,称为请求数据
2.响应数据
通过服务器返回给客户端的所有数据,称为响应数据
3.Servlet API中,定义了请求接口和相应接口,用来封装和操作请求和响应数据
4.doXXX
服务器会创建请求对象和响应对象传递给doXXX方法,doXXX方法可以直接使用响应对象和请求对象
知识点3:利用Servlet对客户端不同方式的请求做出动态响应
客户端访问服务器端Servlet有三种方式**
1.直接从地址栏输入URL访问
2.在网页中点击超级链接访问
<a href="http://localhost:8080/0428-web-servlet/TestServlet">Go servlet</a>
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方法;
知识点4: Servlet中获取普通请求不同名或同名的参数的方法
(一)客户端向服务器servlet传递请求参数的方式有2种
1.在url?name=value&name=value
直接在浏览器的地址栏输入url?name=value&name=value
在a标签里:<a href=”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);
}
2.在a标签里:<a href=”url?name=value&name=value”>
<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);
}
(四)Get请求方式的中文乱码的解决
1.server.xml配置参数:URIEncoding="UTF-8"
2.servlet:response.setContentType(“text/html;charset=UTF-8”);
(五)Post请求方式的中文乱码的解决
1.servlet中:request.setCharacterEncoding(“UTF-8”);
2.servlet:response.setContentType(“text/html;charset=UTF-8”);
知识点5: Servlet初始化参数
(一)什么是Servlet初始化参数
如果Servlet需要使用一些可以配置的参数,可以在创建Servlet时进行设置称为初始化参数;
(二)特点
1.一个Servlet可以配置多个初始化参数,
2.所有的初始化参数只能在当前Servlet类中使用;
(三)设置Servlet的初始化参数
web.xml中的servlet节点使用init-param进行设置
<servlet>
<description></description>
<display-name>TestInitParamServlet</display-name>
<servlet-name>TestInitParamServlet</servlet-name>
<servlet-class>com.tjetc.servlet.TestInitParamServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>中软国际</param-value>
</init-param>
</servlet>
(四)在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());
}
知识点6: 全局参数
(一)什么是全局参数
在应用下的所有的servlet都能使用的参数称之为全局参数
(二)全局参数的特点
在应用下的所有的servlet都能使用全局参数
(三)设置全局参数
web.xml的节点进行配置
<context-param>
<param-name>company</param-name>
<param-value>中国移动公司</param-value>
</context-param>
(四)得到全局参数
ServletContext servletContext = getServletContext();
String company = servletContext.getInitParameter("company");
System.out.println(company);
知识点7: Servlet加载启动选项
(一)什么是servlet的启动选项
在web.xml配置load-on-startup,代表在服务器Tomcat启动的时候就调用servlet的构造方法实例化servlet.这就是servlet的启动选项.
如果没有设置该选项,默认是在第一次访问servlet时调用servlet的构造方法实例化servlet.
(二)如何配置Servlet的启动选项
在web.xml配置load-on-startup,
数值代表启动的顺序,越小越先启动
<servlet>
<description></description>
<display-name>TestLoadServlet</display-name>
<servlet-name>TestLoadServlet</servlet-name>
<servlet-class>com.tjetc.servlet.TestLoadServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
知识点8: Servlet配置中通配符*的用法
(一)什么是通配符配置
要访问Servlet,必须为Servlet配置<url-pattern>,可以使用通配符*进行配置,从而通配多种访问模式
<url-pattern>可以配置多个.
(二)使用方式2种
1.*.扩展名 : 比如 .do、.action
在web.xml中url-pattern配置
<servlet-mapping>
<servlet-name>TestLoadServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
2.以 / 开头,同时以 / 结尾,比如 / 、/admin/***
<servlet-mapping>
<servlet-name>TestLoadServlet</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
知识点9: web.xml中首页及错误页面等其他配置信息
(一)配置首页
1.web.xml配置welcome-file-list->welcome-file
2.配置默认首页:当不指定具体访问路径时,默认访问默认首页
3.将按照顺序访问,都不存在将报404错误
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
(二)配置错误页面
当应用中出现响应错误或者异常时,可以跳转到错误页面
web.xml配置 error-page
1.错误码
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
2.异常类型
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/exception.html</location>
</error-page>
知识点10:Servlet中获取请求头属性的方法
知识点11:重要的请求头属性(请求长度、请求MIME类型、请求referer等)
1.Content-Length:获得请求长度
2.Accept:浏览器能接受的MIME(它全名叫多用途互联网邮件扩展(Multipurpose Internet Mail Extensions),最初是为了将纯文本格式的电子邮件扩展到可以支持多种信息格式而定制的。后来被应用到多种协议里,包括我们常用的HTTP协议。MIME的常见形式是一个主类型加一个子类型,用斜线分隔。比如text/html、application/javascript、image/png等。在访问网页时,MIME type帮助浏览器识别一个HTTP请求返回的是什么内容的数据,应该如何打开、如何显示)类型
3.Referer:来路路径,代表请求从哪个页面转过来的.