学习笔记:servlet

第一个简单的servlet

----web.xml----

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>a1</servlet-name>
        <servlet-class>cloud.windinfo.ServletTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>a1</servlet-name>
        <url-pattern>/mytest</url-pattern>
    </servlet-mapping>
</web-app>

 ----myweb.html----

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>myhtml</title>
</head>
<body>
    <h1>这是我的html</h1>
    <a href="mytest">test</a>
    <form action="mytest" method="post" >
        <input type="submit" value="posttest">
    </form>
</body>
</html>

 ----ServletTest.java----

package cloud.windinfo;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author: WindInForest
 * @Description:
 * @Date Created in 2021-09-11 23:06
 * @Modified By:
 */
public class ServletTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是GET");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是POST");
    }
}

 

servlet生命周期:

(1) 实例化 -- 先创建 servlet实例        //第一次请求进行实例化和初始化
(2) 初始化 --init()
(3) 处理请求 ---service()        //以后每次请求直接处理,不进行实例化和初始化
(4) 服务终⽌ --destory()        //直到服务器关闭执行destory()

 

处理请求 

HttpServletRequest 接口

HttpServletRequest表示 Http 环境中的 Servlet 请求。它扩展于 javax.servlet.ServletRequest 接⼝ )
常⽤⽅法 :
1)String getParameter(String name) 根据表单组件名称获取提交数据,返回值是 String
注:服务器在接收数据时使⽤字符串统⼀接收
2)String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据
3)void setCharacterEncoding(String charset) 指定每个请求的编码 ( 针对 post 请求才起作⽤ )
4)RequestDispatcher getRequestDispatcher(String path) -- 跳转⻚⾯
返回⼀个 RequestDispatcher 对象,该对象的 forward( ) ⽅法⽤于转发请求
​​​​​​​ 5) 存值 request.setAttribute("key",value);
6) 取值 request.getAttribute("key");//取值后需要向下转型  
示例 : String a1=(String)request.getAttribute("uname")

 

客户端如何发送数据给服务器
⽅式 1: 通过表单 get/post 提交
⽅式 2: 通过 a 标签发送数据( get提交) <a href=" 请求名 ?key=value&key=value&key=value...">
⽅式 3: 通过地址栏直接拼接 -get 请求
⽅式 4:js 提交数据 -get请求 location.href=" ⽬标请求 ?key=value&key=value"
: ⽅式 2/3 都属于 get 提交⽅式 , 表单提交可以使⽤ get post 提交⽅式
补充 2 :处理请求乱码的问题
⽅式 1 setCharacterEncoding("UTF-8");//post 提交时管⽤
注意 :tomcat8.0 以后不需要⼿动设置get的编码
补充 3:get post 的区别
1、 GET 请求的数据会暴露在地址栏中,⽽ POST 请求则不会。
2、 在使⽤ GET 请求时,传输数据会受到 URL⻓度的限制。 对于 POST ,由于不是 URL 传值,理论上是不会受限制的,但是实际上各个服务器会规定对 POST提交数 据⼤⼩进⾏限制, Apache IIS 都有各⾃的配置。
3、POST 的安全性⽐ GET的⾼。除此之外, GET 请求提交的数据还可能会造成 Cross-site request
frogery 攻击

 getParameter和getAttribute区别 

 两者区别: 
①getParameter()获取的是客户端设置的数据。 
getAttribute()获取的是服务器设置的数据。 
②getParameter()永远返回字符串 
getAttribute()返回值是任意类型

既然parameter和attribute都是传递参数,为什么不直接使用parameter呢? 
①服务器端不能通过setParameter(key, value)来添加参数,因为没有这个函数 
所以如果需要在服务器端进行跳转,并需要想下个页面发送新的参数时,则没法实现。但是Attribute可以,可以通过setAttribute(),将值放入到request对象,然后在其他页面使用getAttribute获取对应的值,这样就达到一次请求可以在多个页面共享一些对象信息 
②parameter返回值是字符串,意味着不能传递其他的对象,如Map,List,但是attribute则可以存放任意类型的Java对象
 

 HttpServletRespones接口

void addCookie(Cookie var1);// 给这个响应添加⼀个 cookie
void sendRedirect(String var1) ;// 发送⼀条响应码,将浏览器跳转到指定的位置
PrintWriter getWriter() 获得字符流
setContentType() 设置响应内容的类型
重定向 :response.sendRedirect()
转发 :request.getRequestDispatcher("../success.jsp").forward(request,response)
不同点 :
a. 重定向时地址栏会改变 ,request 中存储的数据会丢失 . 转发时地址栏显示的是请求⻚⾯的地
,request 数据可以保存。
b. 转发属于⼀次请求⼀次响应 , 重定向属于两次请求 ( 地址栏修改了两次 ) 两次响应。
补充 : 使⽤ out 对象往⻚⾯中输出 js html,css
: 使⽤ js 跳转⻚⾯,也会丢失 request 中的数据

 

 会话 session 

void setAttribute(String key,Object value) key/value 的形式保存对象值 , 将数据存储在服务器端
Object getAttribute(String key) 通过 key 获取对象值
void invalidate() 设置 session 对象失效
String getId()  获取 sessionid, 当第⼀次登录成功后, session会产⽣⼀个 唯⼀的 id
void setMaxInactiveInterval(int interval)  设定 session 的⾮活动时间
int getMaxInactiveInterval() 获取 session 的有效⾮活动时间 ( 以秒为单位 ) ,默认的有效时间 :30
分钟
void removeAttribute(String key)  从session 中删除指定名称 (key) 所对应的对象

 

 获得初始化参数

(1)web.xml中先定义初始化参数

局部初始化参数:

 <servlet>
     <servlet-name></servlet-name>
     <servlet-class></servlet-class>
     <init-param>
         <param-name>encoding</param-name>
         <param-value>utf-8</param-value>
     </init-param>
</servlet>

全局初始化参数: 

<context-param>
    <param-name>bianma</param-name>
    <param-value>utf-8</param-value>
</context-param>

​​​​​​​(2)servlet中获得初始化参数,重写init()⽅法

encoding= config.getInitParameter("encoding");        //局部

bianhao=config.getServletContext().getInitParameter("bianma");        //全局

通过注解方式获取初始化参数:

@WebServlet(name = "myUserServlet",
     urlPatterns = "/user/test", //斜杠必须
     loadOnStartup = 1, 
     initParams = {
         @WebInitParam(name="name", value="⼩明"),
         @WebInitParam(name="pwd", value="123456")
     }
)

 

​​​​​​​

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
weixin102旅游社交微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值