1.什么是Servlet
servlet就是java里面一种类,只不过这种java类有一些特殊的应用,称呼他为servlet
2.servlet的作用
可以让浏览器直接通过一个路径取访问。(一般Java类做不到这一点)
3.如何写一个servlet类
3.1.三种实现方式:
a.实现接口:javax.servlet.Servlet
b.继承一个抽象类:javax.servlet.GenericServlet
c.继承一个抽象类:javax.servlet.http.HttpServlet(常用)
注意:
Servlet中有五个抽象方法,最重要的就是service(ServletRequest arg0,ServletResponse arg1)
GenericServlet实现了其他四个方法,并添加了一些新的方法,但service() 方法没有实现
HttpService中无抽象方法,将service()方法转为doGet()方法和doPost()方法。所以在HttpServlet中调用doGet和doPost本质上都是在调用service方法,就是更加细化而已。
doGet()和doPost()方法中的参数也由原先的ServletResquest和ServletResponse变为HttpServletResquest和HttpServletResponse
4.servlet的生命周期
i. servlet是单例:在整个web项目运行期间,只会new一个对象。并且是当第一次访问时创建(new)
ii. servlet对象的创建及销毁(服务器来做的):
a.默认情况下,第一次被访问的时候tomcat创建servlet对象(调用无参构造器)
b.tomcat调用init(ServletConfig config)方法 ,在servlet对象实例化之后,tomcat服务器会立马调用这个方法给servlet的实例进行初始化工作。
c.客户端访问的时候,tomcat会调用service(ServletRequest req,ServletResponse res)方法
d.在销毁servlet对象的时候会tomcat调用destroy()方法.
iii.如果想让servlet在服务器(tomcat或其他)开启时就创建,可以在web.xml文件中配置
5.关于HttpServlet中的doGet()和doPost()方法
(其实可以记post的,因为常用的提交方式就是dopost和doget)
get方式:(数据拼接在url请求后,格式为:资源名?name=sss&passwd=111&age=22)
a.浏览器中输入地址(URL)然后回车
b.超链接
c.页面中引入的css样式文件
d.页面中引入的js的文件(javascript)
e.
f.form表单中method="get"
g.ajax中可以设置异步提交请求的方式为get
f.其他
post方式:(数据放在http请求的请求体内)
a.form表单中method=“post"
b.ajax中设置异步提交请求的方式为post
c.其他
7.Servlet中接收客户端传过来的参数
i.格式
参数名称=参数值
ii.获取方式
String value=request.getParameter("key");
(这种传参 参数的类型都是字符串)
如果客户端中form表单用了多选框,就用数据接收
String [] values=requeset.getParameter("arr");
8.中文乱码问题
a.需要修改tomcat中的配置文件,然后重新启动tomcat服务器.
server.xml:在这个文件中找到修改端口号的那个标签,然后加入一个新的属性URIEncoding="UTF-8",或者是写GBK、GB2312
例如:
b.在方法第一句加上req.setCharacterEncoding("GBK");//UTF-8
c.浏览器端乱码时(写在方法的第一第二行)
resp.setCharacterEncoding("GBK");
resp.setContentType("text/html;charset=GBK");
9.servlet跳转
跳转分为两种形式(服务器内部跳转,和客户端重定向)
a.服务器内部跳转(用到的是request对象)
i.通过request对象,获取跳转对象---》RequestDispatcher rq=request.getRequestDispatcher(page);
ii.跳转---》rq.forward(request,response);
(一般简写:request.getRequestDispatcher(page).forward(req,res);)
b.客户端重定向(用到的时response对象)
response.sendRedirece(page);//一般不用
注意:http请求都是无定向的,request存放的信息只有单次请求有效,所以重定向无法携带数据
10.前端如何找到Servlet
a.在web.xml中写配置
b.在类上写注解@WebServlet("/资源名")
eg:@WebServlet("/Test")
public class Test extends HttpServlet {...}
emmmmm....一般都是用eclipse直接新建Servlet,上边自己有,就不用自己配了
11.路径问题
12.三个容器---------request、session、application
13.会话追踪,将http无定向协议实现追踪技术——session、cookie
14.URL重写
15.Filter(过滤器)
16.Listener(监听器)