JSP:写一个servlet

写一个servlet
1、创建包:src目录下-com.bdqn.servlet
2、创建类:servlet
3、继承HttpServlet
4、在类的上面写注解
5、重写方法

@WebServlet("/ser01")
public class Servlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收请求
        String uname=req.getParameter("uname");
        System.out.println("请求的参数:"+uname);
        //响应结果
        resp.getWriter().write("hello"+uname);
    }
}

重写doGet和doPost请求,其实一般只要重写上面那个方法就可以了,它里面定义的方法会判断是post请求还是get请求,然后再执行。
在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。service()方法中写了根据请求方式的不同调用doget()和dopost()

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("Get请求.....");
    doPost(req,resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("Post请求.....");
}

解决乱码看这里!直接copy!

req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");

servlet的生命周期:
init()初始化 会自动调用 只执行一次—>service()当客户端有请求到达时 就会执行–>destory()当应用程序停止时就会销毁

//当有请求到达时 就会执行多次
 @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	 //解决乱码
     req.setCharacterEncoding("utf-8");
    	 resp.setContentType("text/html;charset=utf-8");
   	  System.out.println("Service....");
 }
 //服务器自动调用 当Servlet被销毁(应用程序停止)时执行
 @Override
 public void destroy() {
     System.out.println("destroy...");
 }
 //服务器自动调用  只执行一次 在第一次访问Servlet时执行
 @Override
 public void init() throws ServletException {
     System.out.println("init.....");
 }

使用response.sendRedirect(String path)来进行页面的重定向:

request在当次的请求的url之间有效一次传参数,速度快,缺点是参数只能取一次
forward是转向,将现在的请求转交,他只能在同一个容器里使用同时保存客户的请求状态。
sendRedirect是重定向,可以在同一个容器里使用,也可以发送其他容器请求,但是会丢失请求信息。它等于重发一个请求。
request.setAttribute是在请求域里面加了一个请求的参数,所以在sendRedirect以后是无法取到request.setAttribute的请求的。

requestgetAttribute()与request.setAttribute()
request.getAttribute(“nameOfObj”)可得到JSP页面一表单中控件的Value。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。
而不同页面间传值使用request.setAttribute(position, nameOfObj)时,只会从a.jsp到b.jsp一次传递,之后这个request就会失去它的作用范围,再传就要再设一个 request.setAttribute()。而使用session.setAttribute()会在一个过程中始终保有这个值。
P.S.:JavaScript与JSP中不能相互传值,因为JavaScript运行在客户端,而JSP运行在服务器端。若想使它们之间可以相互传递参数,可以在JSP中设置一个hidden控件,用它的value结合上面所说的用法来传递所需的数值。

ServletContext域与Request域的生命周期比较?

ServletContext:
创建:服务器启动
销毁:服务器关闭
域的作用范围:整个web应用
request:
创建:访问时创建request
销毁:响应结束request销毁
域的作用范围:一次请求中

客户端地址与服务器端地址的写法?
客户端地址:
是客户端去访问服务器的地址,服务器外部的地址,特点:写上web应用名 称
eg: 直接输入地址,重定向
服务器端地址:
服务器内部资源的跳转的地址,特点:不需要写web应用的名称
eg: 转发

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值