Servlet:Server Applet的简称,是服务器端的程序(代码、功能实现),可交互式的处理客户端发送到服务端的请求,并完成操作响应。动态网页技术,JavaWeb程序开发的基础,JavaEE规范(一套接口)的一个组成部分。
接收客户端请求,完成操作。
动态生成网页(页面数据可变)。
将包含操作结果的动态网页响应给客户端。
servlet开发步骤
1.搭建开发环境
将servlet相关的jar包配置到classpath中。
2.编写servlet
实现javax.servlet.Servlet
重写5个主要方法
在核心的service()方法中编写输出语句,打印访问结果
3.部署servlet
编译MyServlet后,将生成的.class文件放在WEB-INF/classes文件中
4.配置servlet
编写WEB-INF下项目配置文件web.xml
<!--1、添加servlet节点--> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.qf.servlet.MyServlet</servlet-class> </servlet> <!--2、添加servlet-mapping节点 --> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping>
注意:url-pattern配置的内容就是浏览器地址栏输入的URL中项目名称后资源的内容
Servlet核心接口和类
在Servlet体系结构中,除了实现Servlet接口,还可以通过继承GenericServlet 或 HttpServlet类,完成编写。
servlet接口的方法
init(ServletConfig config)
ServletConfig getServletConfig()
service(ServletRequest req,ServletResponse res)
String getServletInfo()
destroy( )
GenericServlet抽象类
GenericServlet 使编写 Servlet 变得更容易。它提供生命周期方法 init 和 destroy 的简单实现,要编写一般的 Servlet,只需重写抽象 service 方法即可。
HttpServlet类
HttpServlet是继承GenericServlet的基础上进一步的扩展。 提供将要被子类化以创建适用于 Web 站点的 HTTP servlet 的抽象类。HttpServlet 的子类至少必须重写一个方法,该方法通常是以下这些方法之一: doGet,如果 servlet 支持 HTTP GET 请求 doPost,用于 HTTP POST 请求 doPut,用于 HTTP PUT 请求 doDelete,用于 HTTP DELETE 请求
1.实现接口servlet
2.继承HttpServlet(推荐)
servlet配置:使用web.xml(servlet2.5之前使用) 使用注解(servlet3.0后支持,推荐)
@WebServlet注解常用属性
name: Serlvet名字 (可选)
value: 配置url路径,可以配置多个
urlPatterns:配置url路径 ,和value作用一样,不能同时使用
loadOnStartup:配置Servlet的创建的时机, 如果是0或者正数 启动程序时创建,如果是负数,则访问时创建。 数子越小优先级越高。
initParms:配置编码方式。initParams = {@WebInitParam(name = "encoding",value = "utf-8")}
request对象
在Servlet中用来处理客户端请求需要用doGet或doPost方法的request对象
get和post区别
get请求
get提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连
get方式明文传递,数据量小,不安全
效率高,浏览器默认请求方式为GET请求
对应的Servlet的方法是doGet
post请求
post方法是把提交的数据放在HTTP包的Body中
密文传递数据,数据量大,安全
效率相对没有GET高
对应的Servlet的方法是doPost
get请求收参问题
产生乱码是因为服务器和客户端沟通的编码不一致造成的,因此解决的办法是:在客户端和服务器之间设置一个统一的编码,之后就按照此编码进行数据的传输和接收
get中文乱码
在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。
解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
Tomcat8的版本中get方式不会出现乱码了,因为服务器对url的编码格式可以进行自动转换。
post中文乱码
由于客户端是以UTF-8字符编码将表单数据传输到服务器端的,因此服务器也需要设置以UTF-8字符编码进行接收。
解决方案:使用从ServletRequest接口继承而来的setCharacterEncoding(charset)方法进行统一的编码设置。
request.setCharacterEncoding("UTF-8");
response对象
response对象用于响应客户请求并向客户端输出信息。
解决输出中文乱码
设置服务器端响应的编码格式
设置客户端响应内容的头内容的文件类型及编码格式
response.setContentType("text/html;charset=UTF-8");
servlet执行流程