servlet
servlet本质上是:
用来处理客户端浏览器发出的动态请求的一个程序。
实现servlet程序:
1、编写一个servlet类去继承HttpServlet。(HttpServlet在开发中最为常用)
2、实现service方法,用来处理请求,响应数据。
3、在web.xml内,配置servlet访问地址。
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.right.web.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
servlet的生命周期
1、执行servlet构造器方法(只执行一次,访问时创建servlet程序调用)
2、执行init初始化方法(只执行一次,访问时创建servlet程序调用)
3、执行service方法(调用一次执行一次,可以多次调用)
4、执行destroy方法(只执行一次,web工程停止时调用)
get和post请求分发处理
根据提交表单的get或post方式分别进行处理。
get提交方式进servlet程序的doget方法
post提交方式进servlet程序的dopost方法
ServletConfig类
每一个servlet程序都有一个单独的ServletConfig对象,该对象内有很多方法。
常用于获取servlet程序在xml中的配置信息。
ServletContext类
ServletContext对象是一个域对象,在整个域内所有servlet程序共用一个ServletContext对象。
ServletContext对象常用方法:
setAttribute()
存数据
getAttribute()
读数据
removeAttribute()
删数据
ServletContext对象的这几个方法和map集合类似,以键值对的方式进行存储。
getContextPath()
获取当前的工作路径
getRealPath()
获取在服务器硬盘上的绝对路径
HttpServletRequest类
我们可以通过HttpServletRequest类对象获取客户端发送的所有请求信息。(在doGet方法和doPost中使用该对象)
常用方法:
getRequestURI()
获取请求的资源路径
getRequestURL()
获取请求的统一资源定位符(绝对路径)
getRemoteHost()
获取客户端的 ip 地址
getHeader()
获取请求头
getParmater()
获取请求的参数
getParmaterValues()
获取请求的参数(多个值的时候使用)
getMethod()
获取请求的方式 GET 或 POST
setAttribute(key,value)
设置域数据
getAttribute(key)
获取域数据
getRequestDispatcher()
获取请求转发对象
如果获取到客户端参数为乱码,可以设置
req.setCharacterEncoding("UTF-8");
HttpServletRequest类
对客户端浏览器发出的请求进行响应。
PrintWriter writer = resp.getWriter();
创建一个writer对象,并设置内容回传给客户端。
如果出现回传乱码可以进行设置:
resp.setContentType("text/html; charset=UTF-8");//设置响应文本类型
base标签
base标签放在html文件中的head标签内最上面
base标签可以设置当前页面中所有相对路径工作时,参照那个路径进行跳转。
base路径,和当前页面内引用文件的路径,合起来就是文件的绝对路径。(base+相对=绝对
)
请求转发
服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。服务器内部跳转,外部请求的地址不发生改变。可以转发到WEB-INF目录下。不可以转发到工程外。
可以共享Request域中数据。
req.getRequestDispatcher("/Servlet2").forward(req,resp);//请求转发到Servlet2程序
重定向
由于各种原因,我们之前的网页已可能经废弃,当用户还想通过这个网页地址进行访问时,我们需要给用户重定向到一个新地址。可以转发到WEB-INF目录下。不可以重定向到工程外。
不能共享Request域中数据。
用户请求的地址在完成重定向后会改变为新地址。
resp.sendRedirect("http://localhost:8080");//重定向到该地址