Java代码审计-Servlet基础(1)

html 复制代码
    <form action="/test/getData" method="post">
        <input type="text" name="id"><br>
        <input type="text" name="username"><br>
        <input type="submit" value="提交">
    </form>

首先方式是post,用户点击提交,输入的数据用post进行传递。

发现action是/test/getData,去web.xml里去找对应的路径。

java 复制代码
    <servlet>
        <servlet-name>getdata1</servlet-name>
        <servlet-class>com.example.servlet.getdata</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getdata1</servlet-name>
        <url-pattern>/test/getData</url-pattern>
    </servlet-mapping>

发现是到servlet里的getdata类,转到getdata。getdata有两个方式,一个是doGet,一个是doPost,之前规定了是Post方法,所以数据包就会交给doPost方法进行解决。里面的req就是请求包,我们可以去接收req的数据,req.setCharacterEncoding("UTF-8")是怕里面有乱码先设置一下编码格式,其他的也非常好容易理解。

java 复制代码
public class getdata extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");

        System.out.println("id: " + req.getParameter("id"));
        System.out.println("username: " + req.getParameter("username"));
        System.out.println("ContextPath: " + req.getContextPath());
        Enumeration<String> headerNames = req.getHeaderNames();
        while (headerNames.hasMoreElements()){
            String headerName = headerNames.nextElement();
            System.out.println(headerName+(req.getHeader(headerName)));
            System.out.println("--------------");
        }
        String id = req.getParameter("id");
        String username = req.getParameter("username");
        resp.setContentType("text/html;charset=UTF-8");
        
        String str = "id:"+id+"<br>"+"name:"+username;
        resp.getWriter().write(str);
        // 可以添加响应内容
        resp.getWriter().write("提交成功");
        resp.getWriter().flush();
    }
}

重定向问题:

  1. resp.sendRedirect()是重定向,两次响应,第一次是返回需要重定向的页面名字,第二次是返回重定向页面的内容,所以url地址会直接变掉。

  2. req.getRequestDispatcher(str).forward(req,resp);是转发,就是一次请求,不需要去告诉页面名字,直接将页面数据返回回来,所以url地址没有变化。

Session

其实很简单,就是req是一次响应就是,发数据回数据,session就是将很多次的发数据回数据称为一次会话。就是当登录成功时,会有一个session标识,只要携带了这个对应的session标识就说明这次响应是在同一个会话里完成的。

jsp

本质上也是一个servlet,但是是基于网站的servlet,类似于在html里做一些动态设置。

request.getAttribute()request.getParameter() 完全不是一回事。

request.getParameter和request.getAttribute的区别

request.getParameter是用来取 HTTP 请求参数 (比如表单提交、URL 里的 ?cmd=xxx)。数据来源:浏览器提交。例子

http://localhost:8080/test.jsp?cmd=whoami

string val = request.getParameter("cmd"); // whoami

request.getAttribute("key")是你自己在服务器端 手动存进去的属性,用

request.setAttribute("key", "xxx") 才能取。

数据来源:后端代码,不会自动和表单绑定。

request.setAttribute("key", "whoami"); String val = (String) request.getAttribute("key"); // whoami

相关推荐
好开心啊没烦恼2 小时前
Python数据分析:使用爬虫从网页、社交媒体平台、论坛等公开资源提取中文和英文人名。
开发语言·爬虫·python·数据挖掘·数据分析
雨夜的星光2 小时前
Python环境管理工具全景对比:Virtualenv, Pipenv, Poetry 与 Conda
python·pycharm·conda·virtualenv
lingggggaaaa2 小时前
小迪安全v2023学习笔记(九十七天)—— 云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
java·笔记·学习·安全·网络安全·云原生·kubernetes
Mr.Ja2 小时前
【LeetCode 热题 100】No.49—— 字母异位词分组(Java 版)
java·算法·leetcode·字母异位词分组
我是大头鸟2 小时前
XMLHttpRequest 异步请求servlet 上传文件并且带有参数
ajax·servlet
2401_841495642 小时前
【数据结构】链栈的基本操作
java·数据结构·c++·python·算法·链表·链栈
元亓亓亓2 小时前
SSM--day2--Spring(二)--核心容器&注解开发&Spring整合
java·后端·spring
毕设源码-赖学姐3 小时前
【开题答辩全过程】以 SpringMVC在筑原平面设计定制管理信息系统的应用与实践为例,包含答辩的问题和答案
java·eclipse
猫头虎3 小时前
如何解决 pip install -r requirements.txt 本地轮子路径 ‘./packages/xxx.whl’ 不存在 问题
开发语言·网络·python·r语言·pip·gpu算力·国产