servlet学习笔记(一)之servlet入门教程

一、知识准备

  • servlet 是在服务器上运行的小程序,一个 servlet 就是一个 Java 类,并且可以通过 “请求 - 响应” 编程模式来访问这个驻留在服务器内存里面的 servlet 程序

  • tomcat 容器等级以及 servlet 的位置
    servlet学习笔记(一)之servlet入门教程_第1张图片


二、编写 servlet

  • 继承 HTTPServlet,在创建时,直接指定父类
  • 重写 doGet() 或者 doPost() 方法,右击 ->source->override
  • 在 web.xml 中注册 Servlet
  • 注意: 在使用 myeclipse2017 时,新建的 web 项目没有 web.xml 文件,
    解决:在新建项目之后,填写完项目名,不要点 finish 要点 next,然后选中创建 web.xml 文件
  • 使用 myeclipse 编写 servlet
    1. src->new->servlet
    2. 重写 doGet()doPost()
    3. 部署运行

三、tomcat 容器装载 servlet

  • servlet 容器启动时会自动装载某些 servlet,需要提前在 web.xml 文件中添加如下代码
    
        This is the description of my J2EE component
        This is the display name of my J2EE component
        HelloServlet
        servlet.HelloServlet
    

    
        HelloServlet
        /servlet/HelloServlet
    
  • servlet 类文件被更新后,重新装载 servlet
  • servlet 被装载后,servlet 容器创建一个 servlet 实例并且调用 servlet 的 init() 方法进行初始化
  • servlet 与 jsp 的内置对象的一一对应
    servlet学习笔记(一)之servlet入门教程_第2张图片

四、servlet 生命周期

  • 初始化阶段,调用 init() 方法
  • 响应客户端的请求,调用 service() 方法,根据提交方式选择执行 doGet() 或者 doPost() 方法
  • 终止阶段,调用 destroy() 方法
    servlet学习笔记(一)之servlet入门教程_第3张图片

五、servlet 获取客户端数据的流程

  • 在 src 下的 entity 包建立实体类 user.java,遵循 JavaBean 的设计规则
  • 在 WebRoot 下建立浏览器的主页面,reg.jsp 文件
  • reg.jsp 页面的表单提交的 action 时跳转到 src 的 servlet 包的 RegServlet.java 文件
  • 在 RegServlet.java 中, 需要重写 doGet() 或者 doPost() 方法,通常情况时只重写 doPost() 方法。然后在 doGet() 中调用 doPost() 方法
  • 重写 doPost() 方法时,通过 request.getParameter(“属性名”),获取表单所提交属性值,在利用 user 实体类的 set 方法给实体对象 u 赋值,最后 request.getSession().setAttribute(“regUser”, u); 把赋值成功的实体对象保存在 session 中,其中”regUser” 是用来传递 session 的 id,此时他的类型是 user。request.getRequestDispatcher(“../userinfo.jsp”).forward(request,response) 跳转页面
  • 简而言之:通过 request 给实体类赋值,在把赋值好的实体保存在 session 中,最后通过 request 的服务器内部跳转方式,跳转到其他页面,此时信息已经在 session 中,即:获取 -> 赋值 -> 保存 -> 跳转
  • 跳转到 jsp 的显示信息页面,本页面使用 JavaBean,范围 scope 设定为 session
package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

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

import entity.Users;

public class RegServlet extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public RegServlet() {
        super();
    }

    /**
     * Destruction of the servlet. 
*/
public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet.
* * This method is called when a form has its tag value method equals to get. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet.
* * This method is called when a form has its tag value method equals to * post. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); Users u = new Users(); String username, mypassword, gender, email, introduce, isAccept; Date birthday; String[] favorites; 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")); if (request.getParameterValues("isAccpet") != null) { isAccept = request.getParameter("isAccept"); } else { isAccept = "false"; } // 用来获取多个复选按钮的值 favorites = request.getParameterValues("favorite"); u.setUsername(username); u.setMypassword(mypassword); u.setGender(gender); u.setEmail(email); u.setFavorites(favorites); u.setIntroduce(introduce); if (isAccept.equals("true")) { u.setFlag(true); } else { u.setFlag(false); } u.setBirthday(birthday); // 把注册成功的用户对象保存在session中 request.getSession().setAttribute("regUser", u); // 跳转到注册成功页面 request.getRequestDispatcher("../userinfo.jsp").forward(request, response); } catch (Exception ex) { ex.printStackTrace(); } } /** * Initialization of the servlet.
* * @throws ServletException * if an error occurs */
public void init() throws ServletException { // Put your code here } }
  • 在建立 servlet 的时候,建立的 web.xml 会报错(本人用的是 myeclipse2017)报错的原因也很无语,是因为 servlet 标签里面的 description 和 display-name 没有放到 servlet 的标签的最上面
    在修改 servlet 的时候,要注意,当修改运行之后,却页面却没有变化,是因为 servlet 还没有编译,这时你需要先在服务器项目管理中删掉项目,在重新部署一次,就可以了

六、servlet 路径跳转

1. 访问 servlet
相对路径:”servlet/helloservlet”
使用相对路径时,最开头不能有斜杠,此时是在 tomcat 服务器下
绝对路径:”<%=path%>/servlet/helloservlet”
使用绝对路径时,path 是全局变量,代表项目上下文,此时实在项目下,需要斜杠
2. 从 servlet 跳转到 jsp 的路径
绝对路径:request.getContextPath()+”/test.jsp”
相对路径: “../test.jsp”

注:
1. 在复制一个 web 项目之后,用过 web 的方式无法在更改虚拟路径,此时需要在 deployment assembly 下更改 web context root
2. 在使用 request 进行服务器内部跳转时,不要忘记后面的 forward,来传递 request 和 response

获取初始化参数
在 web.xml 文件中,在 servlet 标签中,可以通过

属性名
属性值

在 servlet 标签中可以有多个 init-param 标签,通过里面的设定属性,并为其复制
然后在 servlet 文件中,进行初始化:
先 private String username; 在 set 和 get 方法
最后在重写的 init() 方法里面赋值:this.setUsername(this.getInitParameter(“username”));
此时的 this 就是 servlet 的对象

MVC 视图:截图

model2 视图:截图

你可能感兴趣的:(JavaEE,servlet)