JAVA-WEB
一、Servlet
1,jsp或html 是客户端,用来发送请求,通过表单或其他形式
请求方法按一般有get和post。
2,servlet用来处理请求;收到请求之后,调用service方法,处理请求
service方法中的参数是:
ServletRequest,子接口HttpServletRequest:封装了所有请求信息,包括请求方法、请求参数等;
--获取请求参数:1)String getParameter(String name)[根据前端参数名获取参数值]
2)String[] getParameterValues(String name)[根据前端参数名获取多个参数值,例如用于多选]
3)Enumeration getParameterNames():返回参数名对应的Enumeration对象
ServletResponse,子接口HttpServletResponse:封装了所有响应信息,用该接口的方法来给用户响应
3,GernericServlet是一个Servlet,是Servlet和ServletConfig的实现类,并且是一个抽象类,使用这个抽象类,会使开发更加简洁
4,HttpServlet:因为使用Http的request和response在GenericServlet需要强转,所以定义该接口,该Servlet继承自GenericServlet
实际开发中直接使用HttpServlet,会根据请求方式直接复写doXXX方法即可

二、JSP
在web.xml中指定出错的代码,然后配置指定的跳转页面
没有JSP的时候,是在Servlet中发响应的,可以通过拼接的方式返回一个HTML页面,也可以直接返回一些数据
在JSP中写JAVA代码的话,需要加符号<% %>;

1,JSP的九大隐含对象(没有声明就可以使用的对象)
比较容易理解的是,JSP继承了HttpServlet,那么它本质也是一个Servlet类,JSP通常是前端页面,然后Servlet是Controller控制器
所以里边的对象基本通用,也就是前后端的参数数据可以通过这些对象传递
1)request:(因为JSP继承了HttpServlet,所以有request等对象,里面的方法自然可以使用)
2)response:基本不用
3)session:代表浏览器和服务器的一次会话
4)pageContext:页面上下问对象,该对象可以获取到其他八个隐含对象,代表当前页面的对象
5)application:代表当前WEB应用,是servletContext对象
6)config:当前jsp对应的servlet的一个servletConfig对象(几乎不用),常用于获取初始化参数(初始化参数是在web-xml中配置的initParam)
7)out:jspWriter对象,调用out.println()方法 --->换行 out。println('<br/>')
8)page:基本不用
9)exception:只有声明页面为 <%@isErrorPage=true %>时才可以使用该对象

域对象:(对属性作用域的范围从小到大)
pageContext :属性作用范围仅限于当前页面
request:属性作用范围仅限于一次请求(每刷新一次页面或者点击一个超链接就是一次请求)
session:属性作用范围仅限于一次会话(浏览器打开直到关闭算一次会话【在此期间会话不失效】)
application:属性作用范围限于当前web应用,范围最大的属性作用范围

2,和属性相关的方法(*):pageContext ,request,session,application都有以下方法
Object getAttribute(String name) : 获取指定的属性
Enumeration getAttributeNames():
void setAttribute(String name,Object o):
removeAttribute(String name):

3,请求转发和重定向
请求转发和重定向的本质区别:
请求转发只发了一次请求:地址栏是初次发出请求的地址
重定向发出了两次请求:地址栏不再是初次发出的请求的地址,地址栏为最后响应的地址

重定向可以防止表单的重复提交

区别二:
请求转发的资源只能是当前Web应用的资源
重定向可以重定向到任意资源

4,JSP指令
JSP指令是为了JSP引擎设计的,并不产生任何直接的输出,而只是告诉JSP引擎该如何处理JSP页面的其余部分
JSP引擎是将JSP转化为Servlet的玩意
1)<page>
.contentType:指定当前JSP页面的响应类型,实际调用的是response.setContentType("text/html;charset=UTF-8");
通常情况下都为text/html;charset=UTF-8,charset是返回页面的字符编码
.pageContentType:指定当前页面的字符编码格式
2)<include>
该指令可以静态引入其他jsp,然后JSP引擎将其翻译为同一个Servlet (同一个.java文件)
3)<taglib>

5,jsp标签
<jsp:include>标签
动态引入:一个jsp引入另一个jsp,生成的是两个.java文件
<jsp:forward>:相当于在页面写了一个请求转发

***** String转Integer:Integer.parseInt(String str);
***** Integer转String:1、toString 2,String.valueOf(Integer i);
-------------------------
MVC流程:
Model View Controller
model:数据层
view:视图层
controller:控制器
控制器是用来处理请求的。具体的做法是:1、Controller收到请求数据
2、调用数据库访问层(DAO)的方法进行处理,DAO处理完之后返回结果给Controller,DAO可以看作是model层
3、Controller收到返回的处理结果,可能会把DAO的返回值放到request中,然后转发或者重定向给View
4、view根据在controller中放入request域对象拿到相应数据,然后进行展示
JSP--->Servlet--->DAO--->DB :只能左边的依赖右边的,不能右边的依赖左边的,是为了保证DAO还可以重用
controller到jsp,可以请求转发或者重定向,但是要注意,请求转发的域对象只能是request,不然拿不动。重定向的域对象是session或application


-------------------------------------
6,案例
query:

查询的时候必须有返回,其余操作看业务
查询返回单个对象SingleObj
查询返回所有对象List

模糊查询
场景:页面任意条件模糊查询
SQL:“SELECT id,name,address,phone FROM customer WHERE” + "name LIKE ? AND address LIKE ? AND phone LIKE ?"

delete:
JSP上的jQuery提示信息:
--“确定要删除吗?”
$(function(){
$(".delete").click(function(){

var flag = confirm("确定要删除吗?");
return false;
});
});
-----自测confirm 函数

insert:

public void addCustomer(request,response){
//获取表单参数
String id = request.getParameter("id");
String name = request.getParameter("name");
String address = request.getParameter("address");
//校验名字是否被占用(****)
//首先调用方法查数据库,例如,查询该名字在数据库的总数,返回值为数值型
//若返回值大于0,说明该名字被占用;否则可以继续添加
//1,如果名字被占用,则在页面显示一个错误信息提示:用户名name已经被占用,请重新输入!
1)具体实现:当该名字被占用时,可以在request作用域中添加属性message,值为“:用户名name已经被占用,请重新输入!”
//return 结束方法
//-->request.setAttribute("message",":用户名name已经被占用,请重新输入!")
//然后在页面获取message的值,并显示(request.getAttribute("message");) 页面显示的方法:out.print();
//将参数交给DAO处理,可以线封装成一个请求对象
Customer customer = new Customer();
customer.setId(id);
customer.setAddress(address);
customer.setName(name);
customerDao.add(customer);
//跳转道成功页面
response.senRedirect("/success.jsp");
}
success.jsp 中一般有一个返回按钮,因为新增成功之后可以跳转到首页

EL(Expression Language) 可以代替原本在JSP中冗长的java代码


update:
update页面必须有一个隐藏域来保存要修改的对象的id,不然就不知道改的是谁
先显示要修改的页面(SELECT)
再修改(UPDATE)


7,会话与状态管理(cookie ,session)

1),cookie:
cookie机制是在客户端保持状态的机制,当浏览器访问服务器时,服务器响应时会在响应头中加入一个小文本文件(cookie,实际上在服务器执行:Cookie cookie = new cookie("name","value")
然后response.addCookie()),

一旦浏览器保存了这个文本文件(没有禁用cookie),那么在下次请求服务器时,请求头中就会带上这个cookie回传给服务器

2),session:
session是在服务器端保持状态:服务器首先检查客户端请求是否具又sessionId,如果有的话,则不为其创建;否则为请求创建sessionId
这个sessionId将会响应给客户端保存(在cookie中保存),但是由于cookie经常被禁用,这时候就找不到sessionId了,这是可以采用URL重写的方法:即把sessionId拼接在URL后面
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄