Servlet常见使用和操作

文章内容

1.重定向
2.Cookie和Session操作
3.异常处理
4.文件上传

以上使用大多是针对HttpRequest和HttpResponse进项操作,这两个对象基本包含的与Http相关的参数和操作;

1.重定向

重定向主要分为两种方式,一种是服务器端通过RequestDispatcherforward的转发请求,对客户端是透明的;另一种是通过HttpResponse的sendRedirect,这种跳转由客户端来响应处理;

req.setAttribute("msg", message);
req.getRequestDispatcher("test.jsp").forward(req, resp);
//resp.sendRedirect("/index.jsp");

注:sendRedirect也可以通过setStatus() 和 setHeader() 方法一起使用来达到同样的效果;

2.Cookie和Session操作

HttpRequest可通过getCookies()获取到当前请求关联的Cookie值,addCookie(Cookie )设置值;

同样的,Session也是通过同样的方式获取,只是一个请求只能关联一个Session,不过可以修改Session中的属性值;

关于Cookie和Session的操作基本都已经被Cookie和Session类封装好,可以直接使用;关于Cookie和Session的作用这里就不介绍了;

Cookie[] cookies = req.getCookies();
StringBuilder sb = new StringBuilder();
for(Cookie c : cookies){
    sb.append(c.getName()+":"+c.getValue());
}
req.setAttribute("cookies", sb.toString());
req.setAttribute("msg", message);

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

3.异常处理

对于Web开发中如果出现错误,出于安全的考虑,我们并不希望将错误信息直接暴露到客户端,我们可以定义统一的异常处理Servlet或者错误界面;

增加web.xml配置:

<!-- error-code 相关的错误页面 -->
<error-page>
    <error-code>404</error-code>
    <location>/error.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <!-- 可以指定异常类型 -->
    <!-- <exception-type>java.lang.Throwable</exception-type > -->
    <location>/ExceptionHandle</location>
</error-page>
//ExceptionServlet.java

package com.aaron.servlet.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ExceptionServlet extends HttpServlet {
private String message;

@Override
public void init() throws ServletException {
        message = "Error String";
}

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        PrintWriter pw = resp.getWriter();
        pw.println("Ststus Code :"+req.getAttribute("javax.servlet.error.status_code"));
        pw.print("<p>");
        pw.print("From Servlet :"+req.getAttribute("javax.servlet.error.servlet_name"));
        pw.print("<p>");
        pw.println("Exception Type :"+req.getAttribute("javax.servlet.error.message"));
        pw.print("<p>");
        pw.flush();
    }

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        doGet(req,resp);
    }
}
4.文件上传

以前文件上传我们基本是使用common-fileupload或者SmartUpload,但是在Servlet 3.0之后,提供了文件上传的API,使用Part代替FileItem,用于获取上传的文件,至于效率上,并没有进行详细的测试;

//使用@WebServlet配置UploadServlet的访问路径
@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
//使用注解@MultipartConfig将一个Servlet标识为支持文件上传
@MultipartConfig
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String path=this.getServletContext().getRealPath("/");
        Part p=req.getPart("uploadFile");
        ApplicationPart ap= (ApplicationPart) p;
        String fname=ap.getSubmittedFileName();
        int name_idx=fname.lastIndexOf("\\")+1;
        String itemName=fname.substring(name_idx,fname.length());
        p.write(path+"/upload/"+itemName);
    }
}

Servlet 3.0提供了一些新特性,其中就包括可用注解代替在web.xml中的配置,包括Servlet、Filter、Listener;

Servlet 3.0还有一个重要的新特性是特强了对异步的支持,来应对复杂的业务逻辑,可同时配置异步的Servlet和异步的Listener用于监听Servlet的创建和完成;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值