Servlet的使用
Servlet就是在服务器内部,接收来自页面的请求、并针对请求做出响应的角色!
Servlet就是浏览器页面与后台Tomcat服务器的连接桥梁!!!
什么是Servlet???
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
总结一句话:Servlet就是一个类(类名可以随便取!),这个类实现了Servlet接口!!!
一、如何在动态web项目中创建Servlet呢?
/*
创建的Servlet类为什么不直接实现Servlet接口,而是继承HttpServlet呢?
原因:自定义的Servlet类继承了HttpServlet,HttpServlet继承了GenericServlet,这GenericServlet实现了Servlet接口
这样的话,我们自定义的Servlet类既没有违背实现Servlet接口的原则,又拓展了功能!
1、创建一个类继承HttpServlet
2、点击黄色警告,添加一个序列化的id(这一步不做也行,但本人有强迫症)
3、重写来自HttpServlet中的service()方法,因为Servlet可以接受请求、响应数据,书写代码的位置就是在service方法内部!
4、将方法中自动生成的代码删除
5、为了能够更好的表示请求与响应对象,将service方法的参数改为request、response
6、告知tomcat服务器,当前的这个类是一个能够接受请求、响应数据的Servlet!!!
这个告知的过程称为Servlet的注册!
注册的方式有两种:
(1)、web.xml文件
(2)、注解
以后开发建议使用注解,简明扼要!!!
在注册Servlet并为Servlet设置访问路径时,要注意:
(1)、注解与web.xml文件同一时间只能存在一个!
(2)、不管是注解还是web.xml文件,在设置路径时,必须保证/的存在!
(3)、多个Servlet在配置时,不允许出现同样的访问路径!
*/
@WebServlet("/haha")
public class HahaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
只要通过浏览器url访问的路径与当前Servlet类设置的访问路径一致时,就会自动执行service方法!
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HahaServlet接收到了请求~");
}
}
二、Servlet中如何获取请求中的数据
@WebServlet("/student")
public class StudentServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("StudentServlet接收到请求~");
/*
数据是从页面以请求的方式带到tomcat服务器Servlet内部的,针对请求的操作,需要用到的对象就是
当前service方法中的request参数!
1、获取数据的方法
request.getParameter("数据关键字") ==> String字符串
request.getParameterValues("数据关键字") ==> String[]字符串数组
如果关键字只对应一个值,那就用第一个方法,得到字符串
如果关键字对应多个值,那就用第二个方法,得到字符串数组
2、请求参数获取时如何处理中文乱码
get请求:
tomcat8.0及之后的版本中,自动针对get请求处理了中文乱码!
tomcat8.0之前的版本,也需要手动处理中文乱码!
new String(sname.getBytes("iso8859-1"), "utf-8");
post请求:
不论哪一个版本的tomcat,都没有针对post请求做出中文乱码处理
所以我们都需要手动设置编码格式!我们只需要在获取数据之前,添加以下这行代码即可!
request.setCharacterEncoding("utf-8");
*/
request.setCharacterEncoding("utf-8");
String sname = request.getParameter("sname");
String gender = request.getParameter("gender");
String[] hobby = request.getParameterValues("hobby");
String degree = request.getParameter("degree");
System.out.println(sname);
System.out.println(gender);
System.out.println(Arrays.toString(hobby));
System.out.println(degree);
//response响应数据
/*
* response.setContentType("text/html;charset=utf-8");
* response.getWriter().write("今天天气真美丽~");
*/
/*
如何在Servlet中进行路径、页面的跳转
1、请求转发
2、重定向
*/
//请求转发
//request.getRequestDispatcher("index.html").forward(request, response);
//重定向
response.sendRedirect("index.html");
}
}
三、登录案例
效果:
登录页面中输入用户名及密码,点击登录按钮,后台接收请求,完成数据库操作,将结果响应回页面!
思路:
1、建库、建表
2、在项目中创建User的实体类与表数据进行关联
3、书写登录页面login.html
4、创建处理登录请求的Servlet类
5、在Servlet内部获取到提交的用户名和密码
6、构建Dao模块,将得到的数据传递到Dao中
7、将mysql驱动、dbutils、druid的jar包导入,将druid.properties连接配置文件,以及DruidUtils工具类导入工程
8、在UserDao中书写jdbc操作代码
9、在Servlet中进行响应处理
10、改进项目,增加业务逻辑层Service