web项目的部署要求:
tomcat
|_common
| |_lib 放置容器中所有应用共享的jar包
|_webapps
|_当前web应用名对应的文件夹
|_WEB-INF
| |_classes
| |_lib 当前web应用自己需要的jar包
| |_web.xml
|_页面(html/jsp)
客户端访问web应用的方式: html==>servlet html====html
1 http://localhost:8088/helloWeb/sayHello?name=mary&...
<===>点击submit提交按钮,将其所在的整个form表单中的所有信息发送给处理类
2 <a href="/helloWeb/sayHello?name=mary&...">showAll</a>
热链接可以触发访问处理类,但是必须手动追加参数信息
服务器内部资源跳转: servlet==>servlet / servlet===>html
request.getRequestDispacher("html路径/url-pattern").forward(request,response);
req/resp req/resp
client=======>DeleteStudentServlet ====> FindAllServlet
/deleteStu /findAll
<================================================
1 request.getRequestDispacher("html路径/url-pattern") : RequestDispatcher
查找url-pattern对应的处理类
2 RequestDispatcher.forward(req,resp);
转发到处理类
获取客户端发送的参数:
request.getParameter(String paramName) : String paramValue;
servlet api结构图:
1 Servlet :封装的是servlet生命周期方法
1)当前处理类先被加载到虚拟机中
2)init(ServletConfig config) 初始化,接收外界传递的信息
3)service(ServletRequest,ServletResponse) 服务方法
4)destroy() 销毁方法
ServletConfig :封装了从web容器中获取初始化参数的方法
2 GenericServlet抽象类 ---- 适配器类
log(String info)
log(String info,Throwable e) 向tomcat/logs目录下的日志文件中记录日志
3 HttpServlet
doGet(HttpServletRequest,HttpServletResponse)
doPost(HttpServletRequest,HttpServletResponse)
client ==> tomcat ===> service(ServletRequest,ServletResponse)
===> service(HttpServletRequest,HttpServletResponse)===获取客户端发送的方式get/post===>
get==> doGet(HttpServletRequest,HttpServletResponse)
post==>doPost(HttpServletRequest,HttpServletResponse)
findALLServlet===mofidy热链接===》modify.html(必须由servlet动态输出,目的的获取热链接发送的参数,包含所有的参数)showModifyPage
===用户修改信息,点击提交==》modifyServlet ===>findAllServlet
绝对路径:/
1 html页面中跳,则/代表8088以后
2 request.getRequestDispatcher("").forward(req,resp);
服务器内部跳,则/代表应用名以后
客户端提交表单的方式:
get :默认值,将参数名=参数值的信息追加到地址栏中显示提交
post :隐式提交,不显示参数信息
======================================================================================================
服务器资源跳转:
1 内部跳转:request.getRequestDispacher("html路径/url-pattern").forward(request,response);
绝对路径是从项目的根目录下开始
只显示第一次使用forward跳转之前的路径信息
缺点:
可能会导致客户端刷新页面,数据重复提交的问题
解决:使用资源重定向跳转
2 资源重定向 response.sendRedirect("html路径/url-pattern");
【代表从客户端发出一个新的请求】
绝对路径是从tomcat根目录下开始
在地址栏显示重定向跳转之后的路径
缺点:
因为是重新发出新的请求,则跳转之后无法共享之前的所有信息
解决:
request.getSession().setAttribute(String name,Object o)
在session对象中保存一个名为name值的对象信息o
request.getSession().getAttribute(String name) : Object o
在session对象中查找名为name值的对象o
======================================================================================================
资源共享数据:
客户端---发送信息---》服务器 :参数
req.getParameter(String name):String value
服务器内部共享信息 :属性
**.setAttribute(String name,Object o)
**.getAttribute(String name) : Object o
======================================================================================================
HttpServletRequest 代表一组请求、响应
req.setAttribute(String name,Object o)
req.getAttribute(String name) : Object o
HttpSession 代表和当前用户相关的一系列请求、响应循环
session.setAttribute(String name,Object o)
session.getAttribute(String name) : Object o
======================================================================================================
作业:
实现管理员注册、登录流程
create table manager(
mid number primary key,
managerName varchar2(12) not null unique,
managerPwd varchar2(12) not null,
realName varchar2(12)
);
系统首页:管理员的登录/注册页面
模块划分:
管理员管理模块
注册
登录 (添加js验证)
学生信息的管理模块
添加新学生
删除学生信息
修改信息
查询所有信息
public Manager login(String name,String pwd)throws Exception;
public void regist(Manager manager)throws Exception;
作业:
实现系统中,同一用户在同一时刻只能登陆一次