servlet处理请求的流程
第一次向服务器发送请求 点超链接 请求连接MyFirstServlet 请求发送到服务器
服务器从Web.xml中查找映射是否有跟请求的对应的MyFirstServlet 这个请求让
谁处理请求 找到一起在映射中的HelloServlet找到servlet中的HelloServlet,
然后找到接口的全限定名,找到HelloServlet,然后调用init,service,
返回service中的字符串
创建Servlet
第一步右击项目栏创建动态项目
第二步在动态项目下的src中创建servlet包路径
第三步在包路径下创建servlet类
如果没有setvlet类的话,可以在
windows->Perspective->Customize Perspective->Shorcuts->Web下 勾选Servlet即可
第四步删除不必要的信息,最终效果如下
注意doPost方法,实际上也是调用doGet方法
Request和Response的作用
Request的作用:
- 获取html页面的请求参数à (String username = request.getParameter("username");)
- 获取项目的虚拟路径à (String contextPath = request.getContextPath();)
- 转发
- 获取转发器à (RequestDispatcher requestDispatcher = request.getRequestDispatcher("success.html");)
- 进行请求的转发à(requestDispatcher.forward(request,response);)
response的作用
- 给浏览器响应一个字符串或者一个页面à (PrintWriter writer = response.getWriter();
- 重定向à (response.sendRedirect("success.html");)
注意中文乱码问题:
- get请求的中文乱码问题的解决方案:在server.xml的配置文件中的第一个Connector标签中添加属性URIEncoding="UTF-8" 65行
- post请求在请求时中文乱码的问题解决方案:在第一次获取请求参数之前设置字符集为UTF-8
- response响应中文乱码解决方案:在获取流之前设置响应数据的类型-->text/html;charset=UTF-8
- request请求中文乱码解决方案:在请求前添加代码-->request.setCharacterEncoding("utf-8");
转发和重定向的区别
- 转发发送一次请求,重定向发送两次请求
- 转发浏览器地址栏地址无变化,重定向浏览器地址栏地址有变化
- 转发可以访问WEB-INF目录下的资源,重定向不可以访问WEB-INF目录下的资源
- 转发可以共享request域中的数据,重定向不可以共享request域中的数据
注意:
如果登录账号密码是正确的用重定向
如果登录账号密码是错误的用转发
登录功能之服务端的准备
创建相应数据库的用户表
创建Java对应数据库的实体类
导入mysql连接java的Jar包
导入commons-dbutils的Jar包(暂不理解用处)
导入druid的Jar包(暂不理解用处)
添加JDBCUtils连接功能实体类
添加BasicDao查询功能实体类
添加数据库连接用的properties文件
创建查询账号密码的dao接口
实现dao接口
创建测试类(直接在测试包下创建测试类)
测试数据库和Java的连接
登录功能之Web端的准备
第一步创建index.html页面
第二步创建pages/login.html页面
第三步创建login_success.html页面
页面整体执行流程:
打开tamcat服务器自动打开index.html首页,点击登录用户,跳转登录页面,输入账号密码提交到servlet(action中的LoginServlet就是servlet服务器所在的页面,提交这个页面等同提交到servelt),在servlet中获取账号密码并验证,验证成功重定向到longin_success.html页面,验证失败转发到登录页面(其中的路径问题后面再讲)
登录功能之前后端交互
第一步
首先在src下创建servlet包,创建servlet类,创建成功后打开WebContent/WEB-INF/web.xml文件,把映射地址写入登录页面的from表单的action地址
第二步
通过request.getParameter()方法获取登录页面传入的参数
第三步
通过创建dao接口的多态传入登录页面的参数从数据库中查找并返回对象
第四步
判断返回的对象如果不为null,则说明前端传入的参数正确,重定向页面
第五步
判断的结果如果为null,则说明前端转入的参数不正确,转发页面
总体执行流程如下:
关于项目中的路径问题
在动态Java项目中前端页面解析的路径和服务器解析的路径不一致
以 / 开头的路径即为绝对路径,绝对路径中的 / 代表什么?
如果路径由浏览器解析,那么 / 就代表http://localhost:8889/
哪些路径由浏览器解析?
1). HTML标签中的路径,如a标签中的href属性中的路径、form标签中的action属性中的路径等
2). 重定向中的路径
如果路径由服务器解析,那么 / 就代表http://localhost:8889/Web_Ex/
哪些路径由服务器解析?
1). web.xml配置文件中的url-pattern标签中的路径
2). 转发中的路径
针对路径问题对项目作出修改,以下是修改后的代码:
- Html(index.html、login.html、login_success.html)页面中的base标签中的href属性可以让当前页面中的相对路径变成绝对路径
- 重定向中加入代码request.getContextPath()获得项目路径(/Web_Ex)
- 服务器地址解析出了项目路径,所以代码中可以写相对路径
外界导入动态项目时常见的问题及解决
略