当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

#JavaWeb(4) Servlet - Ryan的修炼之路

作者:小梦 来源: 网络 时间: 2024-01-09 阅读:

Servelet基础

Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序.
Servlet提供不同的方法用于响应客户端的请求:

  1. doGet();//响应客户端的get请求

  2. doPost();//响应客户端的post请求

  3. doPut();//响应客户端的put请求

  4. doDelete();//响应客户端的delete请求
    通常客户端的请求只有get和post两种, servlet为了响应两种请求必须重写doGet() 和doPost()方法

servelet生命周期

  1. 创建Servlet实例

  2. web容器调用Servlet init () 方法进行初始化。

  3. 容器调用 Servlet 的service() 方法来处理客户端的请求。

  4. web容器决定销毁Servlet 通过调用 destroy() 方法终止(结束)通常在关闭web应用时销毁。

在下列时刻Servlet容器装载Servlet

1.在web.xml文件中的<Servlet></Servlet>之间添加如下代码:


<loadon-startup>1</load-startup> 数字越小表示优先级别越高, tomcat启动时候将自动装载servlet

2.Servlet容器启动后,客户首次向Servlet发送请求.

3.Servlet类文件被更新后,自动重新装载Servlet.

servlet路径跳转

JSP跳转到Servlet

  1. 相对路径,如href="servlet/TestServlet"
    *注意:如果写成"/servlet/TestServlet"会报错,因为第一个'/'表示的是【服务器根目录:http://localhost:8080/】

  2. 绝对路径,通过内置成员变量path实现,如href="<%=path%>/servlet/TestServlet"。
    *注意:这里的path得到的是项目根目录,如【http://localhost:8080/Servlet002_GetFormDemo】

Servlet跳转JSP

  1. 请求重定向:response.sendRedirect(request.getContextPath()+"/xxx.jsp");这里通过request.getContextPath()方法获得项目根目录,或者通过"../xxx.jsp"取得上层路径得到

  2. 服务器内部转发:request.getRequestDispatcher("../xxx.jsp").forward(req,resp);
    *小结:都可以通过../xxx.jsp得到

Servlet作为控制器

设置javabean类

public class Users {    private String username;//用户名    private String mypassword;//密码    private String email;//邮箱    private String gender;//性别    private Date birthday;    private String[] favorites;//爱好    private String introduce;//自我接受    private boolean flagt;//是否接受协议    public Users() {}    ...    //geter 和setter方法省略

在login.jsp中把表单数据递交给jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>My JSP 'reg.jsp' starting page</title>          </head>    <body>    <h1>用户注册</h1>    <hr>    <form name="regForm" action="servlet/RegServlet" method="post" >//表单提交给RegServlet这个servlet控制器  <table border="0" width="800" cellspacing="0" cellpadding="0">    <tr>        <td class="lalel">用户名:</td>        <td class="controler"><input type="text" name="username" /></td>    </tr>    <tr>        <td class="label">密码:</td>        <td class="controler"><input type="password" name="mypassword" ></td></tr>    <tr>        <td class="label">确认密码:</td>        <td class="controler"><input type="password" name="confirmpass" ></td></tr>    <tr>        <td class="label">电子邮箱:</td>        <td class="controler"><input type="text" name="email" ></td></tr>    <tr>        <td class="label">性别:</td>        <td class="controler"><input type="radio" name="gender" checked="checked" value="Male">男<input type="radio" name="gender" value="Female">女</td></tr>       <tr>        <td class="label">出生日期:</td>        <td class="controler">          <input name="birthday" type="text" id="control_date" size="10"          maxlength="10" onclick="new Calendar().show(this);" readonly="readonly" />        </td>    </tr>    <tr>        <td class="label">爱好:</td>        <td class="controler">        <input type="checkbox" name="favorite" value="nba"> NBA &nbsp;          <input type="checkbox" name="favorite" value="music"> 音乐 &nbsp;          <input type="checkbox" name="favorite" value="movie"> 电影 &nbsp;          <input type="checkbox" name="favorite" value="internet"> 上网 &nbsp;        </td>    </tr>    <tr>        <td class="label">自我介绍:</td>        <td class="controler"><textarea name="introduce" rows="10" cols="40"></textarea>        </td>    </tr>    <tr>        <td class="label">接受协议:</td>        <td class="controler"><input type="checkbox" name="isAccept" value="true">是否接受霸王条款        </td>    </tr>    <tr>        <td colspan="2" align="center"><input type="submit" value="注册"/>&nbsp;&nbsp;<input type="reset" value="取消"/>&nbsp;&nbsp;        </td>    </tr>  </table></form>  </body></html>

servlet的doPost方法

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {        request.setCharacterEncoding("utf-8");        Users u = new Users();        String username;        String mypassword, gender, email, introduce;        String[] favorites;        Date birthday;        String isAccept;        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd-");        try {username = request.getParameter("username");mypassword = request.getParameter("mypassword");gender = request.getParameter("gender");email = request.getParameter("email");introduce = request.getParameter("introduce");birthday = sdf.parse(request.getParameter("birthday"));favorites = request.getParameterValues("favorite");isAccept = request.getParameter("isAccept");u.setUsername( username);u.setMypassword(mypassword);u.setGender(gender);u.setEmail(email);u.setFavorites(favorites);if(isAccept.equals("true")) {    u.setFlagt(true);}u.setBirthday(birthday);//把用户对象保存在session中request.getSession().setAttribute("resUser", u);request.getRequestDispatcher("../userinfo.jsp").forward(request, response);        } catch (Exception e) {// TODO: handle exceptione.printStackTrace();        }

把表单提交的参数都存储到一个名为resUers的javabea对象里, 然后把对象存在session中, 这样在下一个页面就可以接收到这个对象的参数了.

网友最爱