servlet应用

在之前的学习中,我们已经经过了以下几个部分:

  1. 封装javabean
  2. 操作集成到doxx.jsp
  3. JSTL替换Java的遍历、取值操作

在以上的过程中,我们的doxxx.jsp只包含Java代码,用来操作数据库。那么我们想一下为什么这么多的doxxx.jsp文件不能用一个Java.class来实现?

我们的servlet接口就是用来实现这个功能的。

操作步骤主要以下面几点为主:

  • 去除doxxx.jsp
  • 新建Java文件
  • 实现servlet接口
  1. 重写service
  2. 提供访问路径
  • 继承HTTPServlet(class)

 当用户访问此jsp的时候,就转接到Java。

实现Servlet接口:

实现接口后会出现五个方法,相当于servlet的是生命周期。

package com.ljq.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 用来实现登录请求处理
 * 
 * @author 一麟
 *
 */
@SuppressWarnings("all")
public class LoginServlet implements Servlet {

	@Override // 销毁
	public void destroy() {
		// 服务被关闭或者修改的时候就会调用这个方法

	}

	@Override // 得到配置
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override // 获得信息
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override // 初始化
	public void init(ServletConfig arg0) throws ServletException {
		// 当请求第一次进来的时候就会调用这个方法
	}

	@Override // 服务
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub

	}

}

1.重写servlet

在生命周期中的servlet这个方法,我们需要将我们之前的处理登录的方法写入这个方法中来。

tip:通过我们传进来的参数可以拿到application,session,request,response(除了pageContext以外其他都能获得),当然也能实现转发。

@Override // 服务
	public void service(ServletRequest SRQ, ServletResponse SRP) throws ServletException, IOException {
		// 直接在servlet接口中拿不到request和respsonse,这个时候我们就需要强转为子接口(HttpServletRequest&HttpServletResponse)再拿请求和响应
		HttpServletRequest request = (HttpServletRequest) SRQ;// 获得请求
		HttpServletResponse response = (HttpServletResponse) SRP;// 获得响应
		// 请求拿过来的值应为编码不一致可能会乱码,这个时候我们就需要通过请求设置编码
		// 在这里可能还会遇到一个问题:当我们设置了中文编码后还会出现乱码的问题,我们可以尝试去换种编码,主要的中文编码有:
		// [utf-8] [gb2312] [big5]    [gbk]
		SRQ.setCharacterEncoding("utf-8");// 设置编码
		// 接收用户数据
		String username = SRQ.getParameter("username");
		String password = SRQ.getParameter("password");
		// 通过响应对象获取了输出对象
		PrintWriter out = response.getWriter();
		// 通过请求对象获取session
		HttpSession session = request.getSession();
		// 通过请求对象获取application(在ServletContext服务容器中获得)
		ServletContext application = request.getServletContext();
		// 经过数据库
		if ("root".equals(username) && "root123".equals(password)) {// 注意:在做判断的时候一定不能拿空值取调用equals方法,一定会报空指针错误
			// 登录成功
			out.println("登录成功");
		} else {
			// 登录失败
			out.println("登录失败");
		}

	}

2.配置路径(web.xml)

注意我们在每次修改了web.xml之后一定要记得重启服务器。

web.xml这个文件之前一直没有提,那么这个文件是用来干嘛的?

web.xml其实就是我们整个项目的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
	id="WebApp_ID" version="4.0">
	<display-name>servlet</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<!--1.配置servlet -->
	<servlet>
		<!--给它取一个名字(name是没有限制的,可以随便取) -->
		<servlet-name>begin</servlet-name>
		<!--servlet-class需要填上类的全路径 -->
		<servlet-class>com.zking.servlet.LoginServlet</servlet-class>
	</servlet>
	<!--2.配置servlet的访问路径 -->
	<!--mapping映射 -->
	<servlet-mapping>
		<!--对应的servlet的名字(与上面name必须要一致) -->
		<servlet-name>begin</servlet-name>
		<!--给它配置一个访问的路径(这里的name也是一样的,随意的) -->
		<url-pattern>/login.do</url-pattern>
	</servlet-mapping>

</web-app>

注意:在配置完路径重启项目我们可能会出现一个错误:

servlet映射中的<url-pattern>/login.do</url-pattern>无效

除了上面直接实现servlet接口这种方法其实还有一种,就是直接继承servlet的接口(HttpServlet ):

两种访问方式(get/post):

  1. get:通过地址栏携带数据,网页中的链接全部都是get
  2. post:参数不会显示在状态栏,并且没有长度限制。

继承类(MyServlet.class):

package com.ljq.servlet;

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

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * servlet子接口继承类(可以自定义)
 * 
 * @author 一麟
 *
 */
@SuppressWarnings("all")
@WebServlet("/login.do") // 直接配置路径,就不需要再去web.xml里面配置路径了
public class MyServlet extends HttpServlet {

	// 处理get请求
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	// 处理post请求
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		req.setCharacterEncoding("utf-8");// 设置编码
		// 接收用户数据
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		// 通过响应对象获取了输出对象
		PrintWriter out = resp.getWriter();
		// 通过请求对象获取session
		HttpSession session = req.getSession();
		// 通过请求对象获取application(在ServletContext服务容器中获得)
		ServletContext application = req.getServletContext();
		// 经过数据库
		if ("root".equals(username) && "root123".equals(password)) {// 注意:在做判断的时候一定不能拿空值取调用equals方法,一定会报空指针错误
			// 登录成功
			out.println("登录成功");
		} else {
			// 登录失败
			out.println("登录失败");
		}

	}
}

index.jsp代码:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="test.do" method="post">
		<p>
			<input type="text" name="username">
		</p>
		<p>
			<input type="text" name="password">
		</p>
		<p>
			<button>登录</button>
		</p>
	</form>
</body>
</html>

好啦这期主要讲解servlet的概念以及基本使用,后续会带来项目的应用ヾ(◍°∇°◍)ノ゙。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一麟yl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值