servlet

servlet

🐲定义

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

🐲生命周期

😶从第一次接受请求开始到服务器关闭之后销毁

😶每次只会初始化一次

😶当配置了标签后,在开启tomcat之后就创建servlet,可设置优先级创建

🐲Service、doGet、doPost方法的区别

  • Service:不管是get还是post请求方法,如果service方法存在,则有限执行service方法。
  • doGet:在没有service的情况下,如果是get请求,调用doGet方法。
  • doPost:在没有service的情况下,如果是post请求,调用doPost方法。
  • 在编写servlet类时,不需要编写service,直接写doGet、doPost

🐲 @Override 注解:

  • 指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素。

🐲 Servlet常见错误:

  • 404:访问资源不存在

    请求路径跟web.xml中填写的请求不一致

    请求路径的虚拟名称填写错误

  • 405:请求的方式跟servlet中支持的方式不一致

  • 500:服务器内部错误

    web.xml中servlet类的名称错误

    servlet对应的处理方法中存在代码逻辑错误

🐲 Servlet系列之Request

url:统一资源定位符

uri:统一资源标识符

  • web.xml

    <servlet>
            <servlet-name>Request</servlet-name>
            <servlet-class>com.ws.RequestServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Request</servlet-name>
            <url-pattern>/request</url-pattern>
        </servlet-mapping>
    
  • RequestServlet

     @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("post请求");
            this.doGet(req,resp);
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("get请求");
    
            //请求行
            //获取请求中的请求方式
            String method = req.getMethod();
            System.out.println(method);
            //获取请求的完整地址
            StringBuffer url = req.getRequestURL();
            System.out.println(url);
            //获取请求中的资源路径
            String uri = req.getRequestURI();
            System.out.println(uri);
            //获取请求中的协议
            String schema = req.getScheme();
            System.out.println(schema);
    
    
    
            //获取请求头数据
            //获取请求头信息中的所有key的枚举对象
            Enumeration<String> headerNames = req.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                String key = headerNames.nextElement();
                String value = req.getHeader(key);
                System.out.println(value +":"+key);
    
            }
    
    
    
            //获取用户请求数据
            //无论请求方式时post还是get,获取用户数据的方式不变
            String name = req.getParameter("name");
            String pwd = req.getParameter("pwd");
            String fav = req.getParameter("fav");
            System.out.println(name + ":" + pwd + ":" +fav);
    
    
            //获取用户信息中的所有key
            Enumeration<String> parameterNames = req.getParameterNames();
            while (parameterNames.hasMoreElements()){
                System.out.println(parameterNames.nextElement());
            }
    
    
            //获取相同key的多个数据值,例如checkbox
            String[] parameterValues = req.getParameterValues("fav");
            for (String str:parameterValues) {
                System.out.println("fav :" + str);
            }
    
    
            //其他常用方法
            String remoteAddress = req.getRemoteAddr();
            String remoteHost = req.getRemoteHost();
            int remotePort = req.getRemotePort();
            System.out.println(remoteAddress+":"+remoteHost+":"+remotePort);
    
        }
    

🐲 Servlet系列之Response

  • web.xml
  <servlet>
        <servlet-name>Response</servlet-name>
        <servlet-class>com.ws.ResponseServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Response</servlet-name>
        <url-pattern>/response</url-pattern>
    </servlet-mapping>
  • ResponseServlet

      @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("this is post");
            this.doGet(req,resp);
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("this is get");
    
            //设置响应头,按照key-value键值对的方式来设置,如果存在相同的key,会把value的值覆盖
            resp.setHeader("hehe","haha");
            resp.addHeader("beijing","shanghai");
    
            //固定属性,返回数据的格式用html标签显示
            //服务端返回的对象数据按照一定的格式要求进行渲染,只有是html格式才会被识别标签
            resp.setHeader("Content-Type","text/html");
            resp.setHeader("Content-Type","text/plain");
           //        resp.setContentType("text/html");
    
    
            //设置状态码
            resp.sendError(404,"not fond");
            resp.getWriter().write("<b> java is easy </b>");  //将内容写到客户端
    
        }
    

🐲 Servlet乱码问题

  • Post
    1. request.setCharacterEncoding(“utf-8”)
  • Get请求
    1. 获取字符串之后使用new String(name.getBytes(“iso-8859-1”,“utf-8”))
    2. 设置request的编码格式,同时在service.xml中添加useBodyEncodingForURI=true的属性
    3. 在service.xml中添加URIEncoding=“utf-8”
  • response响应编码
    1. response.setCharacterEncoding(“gbk”)

🐲 Servlet总结

servlet的流程处理:

  1. 设置请求编码格式
  2. 设置响应编码格式
  3. 接受请求端参数
  4. 进行逻辑代码处理
  5. 返回响应的结果
newifi3 D2 是一款知名的路由器设备,而“老毛固件”是一种第三方固件,常用于对路由器进行刷机以增加功能和改善性能。老毛固件在安全性和稳定性上具有一定的优势,受到很多用户的喜爱。 然而,老毛固件的默认密码是不同于原厂固件的。为了保护设备和用户的安全,建议在刷机之后立即修改密码。 具体设置密码的步骤如下: 1.连接电脑与newifi3 D2路由器设备,确保网络连接正常。 2.打开电脑上的浏览器,输入路由器管理界面地址,默认为192.168.1.1。 3.在登录界面,用户名一般默认为空,密码字段中输入默认的密码“admin”。 4.成功登录后,在路由器管理界面中找到设置选项或管理选项,点击进入。 5.在设置或管理选项中找到“密码设置”或“密码修改”等相关选项,点击进入密码设置界面。 6.在密码设置界面中,输入旧密码(默认为"admin"),然后输入您希望设置的新密码。为了确保密码的安全性,建议使用强度较高的密码,包含字母,数字和特殊字符,并且长度在8位以上。 7.保存设置后,重启路由器以使新密码生效。 需注意的是,由于不同版本的老毛固件可能有所差异,以上步骤可能会有些细微的变化。因此,在进行设置之前,建议先查看官方文档或咨询老毛固件的技术支持,以获取准确的设置步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值