当前位置:文档之家› severlet笔记整理

severlet笔记整理

xml 配置 :




test

action.TestServlet




test

/a123.html/

表单的POST提交 (method="post")
特点:
1.POST请求 服务器会自动调用servlet的 doPost()
2. 不会将要传给服务器的数据添加到地址栏 相对比较安全 理论上参数传递的多少不受限制.


get请求和post请求:

get请求会要求服务器 立即处理该请求 不会形成请求队列.


问题: 对于servlet的 doGet doPost 都是服务器自动调用的, 那么 服务器怎么处理?

服务器会先在 HttpServlet中 调用service() 获得请求方式,判断请求方式的类型,调用相应的方法.


响应: 转发 重定向

转发: 组件A 将未完成的任务 和 请求及响应对象 一同传递给 组件B .
特点:
1. 用户发出请求到获得结果 ,只发送一次数据.
2. 转发属于 服务器端跳转


重定向: 组件A 修改 浏览器的路径 使 浏览器向 组件B 发送请求
1.用户发出请求到获得结果,至少发送两次请求
2.重定向 属于 客户端跳转

//服务器调用 doGet / doPost 取决于 请求方式
//请求方式 被封装到了 请求对象中 request.getMethod() ---post

@Override
/*protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("这是service....");
String method=req.getMethod();
if ("GET".equals(method)) {
doPost(req, resp);
}else if ("POST".equals(method)) {
doPost(req, resp);
}
}*/

//doGet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//获得登录页面的数据 从请求对象获得
String name=request.getParameter("userName");//根据标签的name属性值 获得 标签的值
String password=request.getParameter("password");
System.out.println("GET 账号:"+name+" 密码:"+password);
}

//doPost
// 请求对象中 封装的请求方式 = post request.getMethod()
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//获得登录页面的数据 从请求对象获得
String name=request.getParameter("userName");//根据标签的name属性值 获得 标签的值
String password=request.getParameter("password");
System.out.println("POST 账号:"+name+" 密码:"+password);
//假设 账号--TOM 密码--123 成功 否则失败
// 告诉用户登录 结果 响应 : 转发 重定向
if ("TOM".equals(name)&&"123".equals(password)) {
//使用转发技术 回复 用户
request.getRequestDispatcher("SuccessServlet").forward(request, response);//将当前请求和响应对象 一起 传递

给下一个组件
} else {
// 重定向
response.sendRedirect("FailureServlet");//参数: URL
//告诉浏览器 向某个地址 再次发送数据 属于直接访问
//修改 地址栏上的 路径: http://localhost:8080/servlet/FailureServlet 然后提交
}
}

//服务器调用 doGet / doPost 取决于 请求方式
//请求方式 被封装到了 请求对象中 request.getMethod() ---post

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();

//out.println--向浏览器/网页 打印信息 System.out.print()---向控制台打印信息



页面向服务器传递数据 : 将数据封装到请求对象中
服务器向页面传递数据 : 将数据封装到响应对象中
页面之间传递数据 : URL 其他
服务器中 组件之间 传递数据: 容器
name=张三

servletA ..转发.> servletB ---重定向--> servletC

为什么要使用容器: 解决服务器端组件之间传递数据问题.

Servlet的容器: request容器 session容器 application容器

request对象:
1.服务器将客户端的数据封装到 request对象
2.request也作为一个容器对象,存放数据



request容器:
向容器中放入数据:request.setAttribute("属性名称","值"); // 键名--->值
取出容器中的数据:request.getAttribute("属性名称");

范围: 同一个请求和响应中(同一个请求对象).

session容器:
向容器中放入数据:session对象.setAttribute("属性名称","值"); // 键名--->值
取出容器中的数据:session对象.getAttribute("属性名称");

范围: 服务器会给浏览器分配一个sessionID,之后根据sessionID判断是否为同一个用户.当浏览器不关闭 不重启 不超过sessionID的保存, session将不会失效.

session容器的有效范围: 浏览器不关闭 不重启 session不超时.


application容器:
向容器中放入数据:application对象.setAttribute("属性名称","值"); // 键名--->值
取出容器中的数据:application对象.getAttribute("属性名称");

范围: 服务器从开始 直到 停止为止.


区别:
三个容器: 有效范围不同.
相同点:
容器对象.setAttribute("属性名称","值"); // 键名--->值
容器对象.getAttribute("属性名称");
容器对象.removeAttribute("属性名称");

1.getAttribute用来获取用setAttribute设定的属性值
2.getParameter的返回值类型为string;getAttribute的返回值类型是object(即可以传递对象)
3.request.getParameter()方法获取从Web客户端传到Web服务器端的HTTP请求数据;
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部(服务器端),
在具

有转发关系的Web组件之间共享。即request.getAttribute()方法返回request范围内存在的对象,
而request.getParameter()方法是获取http提交过来的数据。


request容器:

只能使用同一个request对象,进行容器中数据的读取.如果不是同一request对象,
就无法用当前的request对象取出另一个request容器中的数据.

session容器:

只要浏览器不关闭,不新打开浏览器,那么无论是否发生了转发或者重定向,
都可以取出session容器中的数据.

servletContext对象:

从服务器开启,并向容器中存放数据开始,到服务器结束. 这段时间内,无论是否转发,
重定向,重启浏览器,等 都可以访问到该容器内的数据.

数据的传递:
页面-->服务器,使用请求对象传递 服务器将数据封装到了请求对象中
服务器中的各组件之间: 容器 将数据放入到特定的容器中,根据容器的有效范围,供其他组件进行访问.


Servlet容器: request容器 session容器 application容器

request容器:同一个请求过程中有效(同一个请求对象). 请求---->取出 ----->取出---> 响应 ---->取出不到了
request不仅是请求对象,还是一个容器.
特点: 与请求对象有关.

session容器: 同一个会话中.只要客户的浏览器不关闭,不重启,session不失效(默认30分钟),在同一个项目的任何位置都可以访问到session容器中的数据.
特点: 与转发和重定向无关,与浏览器的状态有关.


application容器: 从服务器开启并产生向容器中放入数据开始,到服务器关闭时结束.在同一个项目的任何位置都可以访问到application容器中的数据.

特点:与转发,重定向,浏览器无关. 与服务器的状态有关.

共同点:
容器对象.setAttribute(参数名,值);
容器对象.getAttribute(参数名);
容器对象.removeAttribute(参数名);
区别: 容器中数据的有效范围不同.


网页操作数据库:

//设置编码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//获得type参数 判断 业务类型
String type=request.getParameter("type");
if ("addStu".equals(type)) {
addStu(request, response);
}else if ("delStu".equals(type)) {
delStu(request, response);
}else if ("upStu".equals(type)) {
upStu(request, response);
}else if ("selStu".equals(type)) {
selStu(request, response);
}
}


private void selStu(HttpServletRequest request, HttpServletResponse response) throws IOException {
//默认查询所有数据
String sql="select * from t1";
List list=null;
try {
list=stu.select(sql,new Object[0]);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (list!=null) {
out.print("

");
out.print("

>姓名

");
for (int i = 0; i < list.size(); i++) {
Map map=(Map) list.get(i);//代表一条数据
out.print("");
}
out.print("
ID密码性别年龄地址
"+map.get("id")+""+map.get("name")+""+map.get("password")
+"
"+map.get("sex")+""+map.get("age")+""+map.get("address")+"
");
} else {
out.print("对不起,没有您要查询的数据...");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


private void upStu(HttpServletRequest request, HttpServletResponse response) throws IOException {
//获得数据
String oldname=request.getParameter("oldname");
String name=request.getParameter("name");
String password=request.getParameter("password");
String sex=request.getParameter("sex");
String age=request.getParameter("age");
String address=request.getParameter("address");
Object[] param=new Object[]{name,password,sex,age,address,oldname};
//执行添加
int i=stu.update(param);
//处理执行结果
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (i!=-1) {
out.println("修改成功,3秒后跳转到主页..");
} else {
out.println("修改失败,3秒后跳转到主页..");
}
response.setHeader("refresh", "2;url=main.jsp");

}


private void delStu(HttpServletRequest request, HttpServletResponse response) throws IOException {
String name=request.getParameter("name");
Object[] param=new Object[]{name};
int i=stu.delete(param);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (i!=-1) {
out.println("删除成功,3秒后跳转到主页..");
} else {
out.println("删除失败,3秒后跳转到主页..");
}
}


private void addStu(HttpServletRequest request, HttpServletResponse response)
throws IOException {
//获得数据
String name=request.getParameter("name");
String password=request.getParameter("password");
String sex=request.getParameter("sex");
String age=request.getParameter("age");
String address=request.getParameter("address");
Object[] param=new Object[]{name,password,sex,age,address};
//执行添加
int i=stu.insert(param);
//处理执行结果
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (i!=-1) {
out.println("添加成功,3秒后跳转到主页..");
} else {
out.println("添加失败,3秒后跳转到主页..");
}
response.setHeader("refresh", "2;url=main.jsp");
}


//查询 : 查询所有 条件查询(检验登录 )
public List select(String sql,Object[] param) throws SQLException {
//加载驱动
//获得数据库连接
//创建执行对象
//使用执行对象执行SQL命令
//处理结果
//关闭资源

db.doSQL(sql,param);
ResultSet resultSet=db.getRS();
List list=null;
if (resultSet!=null) {//只要查询正常执行 都会返回一个集合 即使是空集合
https://www.doczj.com/doc/0f14431452.html,st();//将指针移动到最后一行
int i=resultSet.getRow();//获得当前行的 行索引
if (i>0) {//至少含有一条数据
list=new ArrayList();//用来存放map 每个map代表一条数据
resultSet.beforeFirst();//将指针移动到最前端
while(resultSet.next()){//将指针向后移动一次 如果含有数据 返回true 否则 false
Map map=new HashMap();
String id=resultSet.getString("id");
String name=resultSet.getString("name");//根据字段的名称 获的当前行 字段的值
String sex=resultSet.getString("sex");
String password=resultSet.getString("password");
String age=resultSet.getString("age");
String address=resultSet.getString("address");
map.put("id",id);
map.put("name",name);
map.put("password",password);
map.put("sex",sex);
map.put("age",age);
map.put("address",address);
list.add(map);
//System.out.println("id:"+id+" name:"+name+" sex:"+sex+" age:"+age+" address:"+address);
}
} else {//没有任何数据 空集合
System.out.println("对不起,没有您要查询的数据...");
}

} else {
System.out.println("异常....");
}
db.getClose();
return list;
}
}





















相关主题
文本预览
相关文档 最新文档