1、Servlet简介
什么是Servlet
Servlet是运行在web服务器上的java程序
Servlet的作用
读取客户发送的所有数据
查询http请求中包含的任何其他请求信息
处理数据并生成结果
设置合适的http响应参数
将响应信息回送给客户端
2、查询请求中包含的其他请求信息
getRemoteAddr(); // 获取远程地址
getRemoteHost(); // 获取远程主机
getRemotePort(); // 获取远程端口
getRemoteUser(); // 获取远程用户
3、请求信息
//处理乱码?
request.setCharacterEncoding(“utf-8”);
//1.如何获取单个数据?
String username=request.getParameter("username");
System.out.println("username:"+username);
//2.如何获取多个数据?
String[] hobby=request.getParameterValues("hobby");
System.out.println("hobby:"+Arrays.toString(hobby));
//3.如何获取隐藏域的数据?
String id=request.getParameter("id");
System.out.println("id:"+id);
//4.如何获取url后面跟着的数据?
String yaoshuijiaoderen=request.getParameter("yaoshuijiaoderen");
System.out.println("yaoshuijiaoderen:"+yaoshuijiaoderen);
4、查询请求中包含的其他请求信息
//从哪里查这些信息呢?request ,所有客户端的请求信息都在request中封装着
count++;
String remoteAddr=request.getRemoteAddr();
String remoteHost=request.getRemoteHost();
int remotePort=request.getRemotePort();
String remoteUser=request.getRemoteUser();
System.out.println("第"+count+"次访问者是:"+remoteHost+","+remoteAddr);
System.out.println("remoteAddr:"+remoteAddr);
System.out.println("remoteHost:"+remoteHost);
System.out.println("remotePort:"+remotePort);
System.out.println("remoteUser:"+remoteUser);
//还可以获取服务端的相关信息
System.out.println("localAddr:"+request.getLocalAddr());
System.out.println("localName:"+request.getLocalName());
System.out.println("localPort:"+request.getLocalPort());
System.out.println("locale:"+request.getLocale());
1、 返回普通文本:Content-Type="text/plain"
2 、返回一段HTML代码 :Content-Type="text/html"
3 、返回一段XML代码:Content-Type="text/xml"(注意,是代码!没有返回一个XML文件这种说法,服务器与浏览器通过IO流来传输,所以只能是某种格式的字符串而不是一个文件)
4 、返回一段javascript代码:Content-Type= "text/javascript"
5 、返回一段json代码:Content-Type="application/json"
总结:除了Json是application/json,其他的文本、xml、html、js都是text/自身类型。
5、响应回去客户端一段文本:hello,client
//1.先设置字符编码,兼容汉字
response.setCharacterEncoding(“utf-8”);
//2.设置响应的内容类型
response.setContentType(“text/plain;charset=utf-8”);
//3.获取输出流
PrintWriter pw=response.getWriter();
//4.数据数据即可
pw.print(“hello,client,你好,客户端”);
6、doget()和dopost()
url请求:默认get提交
超链接:默认get提交
表单:默认get提交,可以通过method=“post” 修改成隐式提交
7、横向越权和纵向越权
横向越权:横向越权指的是攻击者尝试访问与他拥有相同权限的用户的资源
纵向越权:纵向越权指的是一个低级别攻击者尝试访问高级别用户的资源
如何防止横向越权漏洞:
可通过建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户所有的。
对请求中的关键参数进行间接映射,避免使用原始关键参数名,比如使用索引1代替id值123等
如何防止纵向越权漏洞:
建议使用基于角色访问控制机制来防止纵向越权攻击,即预先定义不同的权限角色,为每个角色分配不同的权限,每个用户都属于特定的角色,即拥有固定的权限,当用户执行某个动作或产生某种行为时,通过用户所在的角色判定该动作或者行为是否允许。
8、jsp和html的命名规范
(1)jsp与html文件名全部小写
(2)数据/内容显示页
名称形词,多个单词用下划线分隔,要求能说明显示内容的信息,为避免冲突,可加上“_list”或者其他的单词。例如:news_message.html或file_list.jsp
(3)操作处理页:名称_动词,例如:file_delete.jsp
(4)名称最好从访问大刀小命名(或者是模块名_子模块名_操作的方式),比如service_order_delete.jsp,当jsp页面很多的时候,容易检索和识别