servlet(非常重要)
一.servlet是什么?
Servlet(全称为 Server Applet)是一个接口.是java服务器运行java代码的接口.类似于java连接数据库用的JDBC的接口,而java连接服务器的接口就是servlet,实现这个接口的厂商有Tomcat,jboss,webLogic等服务器.
总结:
(1)Servlet本质上一段java程序
(2)Servlet程序无法独立运行,必须放在服务器中,由服务器调用才可以执行!
(3)Servlet的作用是:接受请求、处理请求、将结果响应给浏览器。
二.servlet接口继承的结构.
servlet接口及子类的组织架构情况.
1.servlet接口.
这个接口时Tomcat提供的.不是JDK里的,这个接口提供了java代码处理网络请求的接口.
public interface Servlet {
//这是servlet初始化执行的方法,servlet初始化是随着tomcat初始化的时候就初始化的.
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
//这是每次调用本servlet,也就是请求过来一次,调用一次本方法
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
//这是servlet销毁时执行的方法,但是servlet销毁时随着tomcat的停止而销毁的
void destroy();
}
特点:
1.init()方法,这个方法是本servlet实例化时调用的类.一般只会在Tomcat启动时执行一次.
2.destory()方法:这个方法是在servlet在tomcat停止时,销毁servlet时调用本方法执行一次.
3.service()方法:这个方法是请求一次执行一次.这是一个抽象方法.业务代码就写在service方法内.
2.genericServlet
作用:实现了init()和destory()等方法,只留下具体的业务的方法service()未实现.
3.HttpServlet
作用:
1.继承了抽象类GenericServlet类,实现了service()方法.
2.将service方法分成了get/post/delete/put等请求方式.
4.XXXServlet(这是自己实现的编写的servlet类)
作用:
1.因为我们自己实现servlet接口的话,需要做的东西非常多,包括初始化方法等等,所以我们注解extends httpServlet类,站在巨人的肩膀上,代码编写更快.
例如:
/**
*这就是直接继承HttpServlet类,在get()或者post()方法中书写我们后台代码的逻辑.
*/
public class RequestDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("utf-8");
String user = request.getParameter("user");
String[] likes = request.getParameterValues("like");
System.out.println(user);
for (String like : likes) {
System.out.println(like);
}
out.write("得到你的参数了");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
三.servlet开发步骤
1.添加servlet的jar包或者是添加servlet的服务器,例如Tomcat等.
2.自己创建类extends HttpServlet类,重写其中的方法.
3.配置web.xml中的servlet的映射路径,或者在web3.0之后,可以用注解配置url映射.
web.xml的形式
<servlet>
<description></description>
<display-name>HelloServlet222</display-name>
<servlet-name>HelloServlet222</servlet-name>
<servlet-class>com.tedu.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet222</servlet-name>
<url-pattern>/HelloServlet222</url-pattern>
</servlet-mapping>
@webServlet注解的形式
@WebServlet("/servletDemo1")
public class ServletDemo1 extends HttpServlet {
4.运行测试
4.1 这是run as server ,在服务器中运行.
4.2 测试的url为 : ip:端口号/项目名称/servlet映射.
例如:http://localhost:80/test-dynamic-web/servletDemo1
request/response对象
一次请求到后台的调用过程.
一.request
request请求基本上封装了所有前台转发过来的信息,从ip到请求方式,到请求参数等等.
1.request对象的方法
2.获取请求参数
request.getParameter(String name) – 根据请求参数的名称获取参数值。返回String类型的参数值。
例如,获取用户名:String username = request.getParameter(“username”);request.getParameterValues(String name) –
根据请求参数的名称获取多个值组成的数组。返回String类型的数组。 例如获取爱好:String[] likes =
request.getParameterValues(“like”);
3.请求转发
(1)、请求转发:是指定服务器中的某一个资源(Servlet或JSP)在处理请求的过程中,将请求转发给一个其他的资源,让其他资源来处理请求。
格式:
request.getRequestDispatcher(“转发到资源的路径”).forward(req, res)
(2)域对象:能够在指定的范围内, 利用自身的map实现数据的共享
在request对象内部保存了一个map,专门用于存取数据。这个map我们可以称之为是request域
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//模拟通过jdbc查询当前用户的个人信息
String name = "张鹏";
int age = 28;
//将查询到的个人信息存入到request对象的map集合中
request.setAttribute("name", name);
request.setAttribute("age", age);
//将请求转发到show.jsp并将数据带到jsp中显示
request.getRequestDispatcher("show.jsp")
.forward(request, response);
}
(3)请求转发的模型图
二.response
1.response对象的方法
2.向客户端发送数据
//字符流输出
PrintWriter out = response.getWriter();
out.write("我爱祖国");
//字节流输出
OutputStream stream = response.getOutputStream();
stream.write(121312);
3.重定向
重定向:是指当用户浏览某个网址时,将其导向到另一个网址的技术。
重定向和转发的区别:
1.转发只能在同一个Web应用内部的两个资源之间进行跳转, 不可以是不同的Web应用或者不同的服务器中进行跳转。而重定向则没有此限制
2.转发是一次请求,一次相应.重定向是多次请求,多次相应.
3.重定向会改变请求的url地址,转发不会改变请求的url地址
response.sendRedirect("/hello.jsp");