jsp&servlet笔记(二)

本文深入讲解Servlet的工作原理,包括配置、请求处理、响应生成及参数传递等关键环节,并演示了如何在项目中实现Servlet,从初始化到服务请求的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、

一个servlet在项目中可以有三个名字:

1、存在于jsp页面的url

2、部署在DD中的中间名字

3、实际的class文件

 

在DD中一般为:

<servlet>
        <servlet-name>InnerServletName1</servlet-name>
        <servlet-class>practice.myServlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>InnerServletName1</servlet-name>
        <url-pattern>/handle1.do</url-pattern>
    </servlet-mapping>

其中url-pattern就是1中名字,servlet-name是2中的,servlet-class是3中的名字。

然后可以在src文件夹中创建包practice,创建一个java class名为myservlet1

在jsp页面中建立一个<a>元素href指向handle1.do。点击时即可向对应的servlet发出GET请求。

二、如何编写Servlet类

public class myServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     resp.setContentType("text/html");
     PrintWriter pw=resp.getWriter();
     for(int i=0;i<10;i++){
         pw.println("<h2>hello ! =>"+(i+1)+"</h2>");
     }
     pw.flush();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter out=resp.getWriter();
        out.println("<h1>Ok I get it.</h1>");
        out.flush();

    }
}

像这样,覆盖两个方法即可(一般情况下只需要覆盖两个)。

三、jsp中使用java代码

比如:

<p>Current time:<% Date d=new Date();out.println(d.getHours()+":"+d.getMinutes());%></p>

插入到jsp页面时将会产生当前的时间。

所以java代码实际上就是写在<%...%>中的。

四、把请求转发给另一个页面

调用请求分派器:

req.getRequestDispatcher("result.jsp").forward(req,resp);

五、servlet的三个方法

 一个servlet类将存在三个时刻:

init();service();doget/dopost;

第一个方法是在初始时调用,比如在init方法中连接数据库;

service基本不大可能被覆盖。

get/post请求分别对应两种方法。

而且每一个请求都在一个单独的线程中运行,但一个servlet类仅有一个实例对象。

六、servlet对象里面的对象

1、servletConfig对象。在部署时就传递信息,这个信息在DD中,用来访问servletContext。

2、servletContext实际上是每一个web-app都有的参数。

七、参数传递

参数传递可以用POST方法或者GET方法。但是提交表单时一般是相当于一个hash表传递给servlet。

然后在servle中使用getParameter方法获取参数值。

如果是复选框的参数(一次性可以选择多个值)就要用getParamterValues来得到参数的数组。

八、用响应传输一个文件

一般来说,需要在respose中设置MIME类型:

text/html

application/pdf

video/quicktime

application/java

image/jpeg

application/jar

application/x-zip

application/octet-stream

接下来以最简单的一个图片文件来做示范:

在web目录下新建一个pictures目录,放入一张图片

在对应的方法写下:

resp.setContentType("image/jpeg");//你想传送的文件类型
        ServletContext context=getServletContext();
        InputStream is=context.getResourceAsStream("/pictures/tb.jpg");//文件夹里的一个图片
        int read=0;
        byte[] bytes=new byte[1024];
        OutputStream os=resp.getOutputStream();
        while ((read=is.read(bytes))!=-1){//io操作
            os.write(bytes,0,read);
        }
        os.flush();
        os.close();//刷新并关闭输出流

九、请求重定向

resp.sendRedirect("result.jsp");//发送重定向到指定页面或者网址

 

基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值