JSP(4) ----servlet 编程1

Servlet

Servlet是很多框架的技术基础

Servlet是特殊的java类,没有main方法,运行于服务端,创建和销毁都由Servlet容器管理

Servlet容器值tomcat。

Servlet与http紧密联系,Servlet可以处理几乎所有http相关的内容

简单的Servlet程序,输出hello

添加Servlet类:

package com.jike.servlet;

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

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

public class HelloServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		System.out.println("====init无参方法=====");
		super.init();
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("====init带参方法=====");
		super.init(config);
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("====service=====");
		//super.service(arg0, arg1);
		// 编写service方法体
		PrintWriter pw = resp.getWriter();
		pw.println("hello");
		pw.close();
	}

	@Override
	public void destroy() {
		System.out.println("====destroy=====");
		super.destroy();
	}

}

在web.xml文件中添加:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <servlet><!-- 用于注册一个Servlet -->
  	<servlet-name>HelloServlet</servlet-name><!-- 设置注册名称 -->
  	<servlet-class>com.jike.servlet.HelloServlet</servlet-class><!-- 设置完全限定名 -->
  </servlet>
  
  <servlet-mapping><!-- 映射Servlet对外访问的路径 -->
  	<servlet-name>HelloServlet</servlet-name><!-- servlet的注册名称,与 <servlet-name>中的一致-->
  	<url-pattern>/Hello</url-pattern><!-- 指定Servlet对外访问的路径 -->
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

在浏览器中访问http://localhost:8080/JSPStudy/Hello

Servlet中的包:

javax.servlet: 包含了Servlet最基本的接口和类。

接口:

  • Servlet :声明所有Servlet必须实现的方法
  • ServletRequest:获取客户端请求信息的方法
  • ServletResponse:声明了向客户端浏览器发送相应的方法
  • ServletConfig : 什么了Servlet配置信息的方法
  • ServletContext : 用于获取Servlet容器信息的方法

类:

  • GenericServlet :定义通用的,独立于底层协议的一般性的Servlet
  • ServletInputStream : 从客户端读取二进制数据
  • ServletOutputStream : 向客户端发送二进制数据

javax.servlet.http:基于http协议的接口和类

接口:

  • HttpServletRequest : 为http提供请求信息
  • HttpServletResponse : 发送http协议的相应信息
  • HttpSession : 表示客户端并存储客户端的有关信息

类:

  • HttpServlet : 扩展自GenericServlet,创建基于http协议的Servlet
  • Cookie : 存储Servlet发送给客户端的信息

javax.servlet.annotation:Servlet的一些注解

javax.servlet.descriptor : 获取jsp或者标签库的配置信息

Servlet编程实例

登录信息:

设置登录页面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<form action="<%= request.getContextPath() %>/loginServlet">
		userName:<input type="text" name="uname"/><br/>
		password:<input type="password" name="upwd"/><br/>
		<input type="submit" value="Login"/>
		<input type="reset" value="Reset"/>
	</form>
</body>
</html>

Servlet:

package com.jike.servlet;

import java.io.IOException;

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

public class LoginServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5864346102781070171L;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//super.service(req, resp);
		// 获取表单提交的内容
		String userName = req.getParameter("uname");
		String password = req.getParameter("upwd");

		System.out.println("username:" + userName);
		System.out.println("password:" + password);

	}

}

在web.xml中添加:

  <servlet>
  	<servlet-name>LoginServlet</servlet-name>
  	<servlet-class>com.jike.servlet.LoginServlet</servlet-class>
  </servlet>
    <servlet-mapping>
  	<servlet-name>LoginServlet</servlet-name>
  	<url-pattern>/loginServlet</url-pattern>
  </servlet-mapping>

HTTP请求的类型

OPTIONS : 返回服务器支持的HTTP方法

POST : 将指定的资源提交到服务器进行处理

GET : 从指定的资源请求数据

PUT : 上传指定的资源

DELETE : 删除指定的资源

HEAD : 与get相同,但是只返回HTTP的报头,不会返回主体

GET 与POST的区别:

对LoginServlet.java做如下修改:

package com.jike.servlet;

import java.io.IOException;

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

public class LoginServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5864346102781070171L;

//	@Override
//	protected void service(HttpServletRequest req, HttpServletResponse resp)
//			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//super.service(req, resp);
		// 获取表单提交的内容
//		String userName = req.getParameter("uname");
//		String password = req.getParameter("upwd");
//
//		System.out.println("username:" + userName);
//		System.out.println("password:" + password);

//	}

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

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("========doPost=============");
		String userName = req.getParameter("uname");
		String password = req.getParameter("upwd");

		System.out.println("username:" + userName);
		System.out.println("password:" + password);
	}

}

这样GET和POST请求可以共用。

完善登陆页面

完整代码如下:

Servlet:

package com.jike.servlet;

import java.io.IOException;

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

public class LoginServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5864346102781070171L;

//	@Override
//	protected void service(HttpServletRequest req, HttpServletResponse resp)
//			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//super.service(req, resp);
		// 获取表单提交的内容
//		String userName = req.getParameter("uname");
//		String password = req.getParameter("upwd");
//
//		System.out.println("username:" + userName);
//		System.out.println("password:" + password);

//	}

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

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("========doPost=============");
		String userName = req.getParameter("uname");
		String password = req.getParameter("upwd");

		System.out.println("username:" + userName);
		System.out.println("password:" + password);

		String forword = null;

		if(userName.equals("thystar") && password.equals("thystar")){
			// 请求转发
			// 使用请求转发只能使用同一应用的地址,不能转发其他页面的地址
			// 假设forward = "http://www.baidu.com";则请求转发出现404错误
			forword = "/08/success.jsp";//转发地址
			//RequestDispatcher 请求调度器,封装转发的操作,接收来自客户端的请求
			// 然后将其转发到指定的资源
			RequestDispatcher rd = req.getRequestDispatcher(forword);
			rd.forward(req, resp);

			// 请求重定向
			// 请求重定向无法在跳转页面得到username,和password的值,
			// 但是请求转发可以使用不同应用的地址
			// 假设forward="http://www.baidu.com";请求重定向可以访问。
			//resp.sendRedirect(req.getContextPath() + "/08/success.jsp");
		}else{
			// 请求转发
			forword = "/08/error.jsp";
			RequestDispatcher rd = req.getRequestDispatcher(forword);
			rd.forward(req, resp);

			// 请求重定向
			//resp.sendRedirect(req.getContextPath() + "/08/error.jsp");
		}
	}

}

在WebRoot下新建 /08/success.jsp,添加代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
登陆成功<br/>
用户名: <%= request.getParameter("uname") %><br/>
密码:<%= request.getParameter("upwd") %><br/>
<a href="login.jsp">返回登陆页面</a>
</body>
</html>

新建 /08/error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
登陆失败<br/>
用户名: <%= request.getParameter("uname") %><br/>
密码:<%= request.getParameter("upwd") %><br/>
<a href="login.jsp">返回登陆页面</a>
</body>
</html>

/08/login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="<%= request.getContextPath() %>/loginServlet" method="post">
		userName:<input type="text" name="uname"/><br/>
		password:<input type="password" name="upwd"/><br/>
		<input type="submit" value="Login"/>
		<input type="reset" value="Reset"/>
	</form>
</body>
</html>

在web.xml中添加:

  <servlet>
  	<servlet-name>LoginServlet</servlet-name>
  	<servlet-class>com.jike.servlet.LoginServlet</servlet-class>
  </servlet>
    <servlet-mapping>
  	<servlet-name>LoginServlet</servlet-name>
  	<url-pattern>/loginServlet</url-pattern>
  </servlet-mapping>

极客学院:http://www.jikexueyuan.com/course/584.html

部分图片从课程中直接截取

时间: 2025-01-04 16:30:49

JSP(4) ----servlet 编程1的相关文章

JSP(4)----servlet编程2

接上节:http://4440271.blog.51cto.com/4430271/1661880 修改校验逻辑,从数据库中获取用户信息进行校验: 结合jsp, jdbc, servlet; 首先,修改UserDao接口 添加方法声明,用来根据用户名和密码获取用户信息. 代码: package com.jike.dao; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; imp

JSP(4)----servlet编程3

Servlet过滤器 由Servlet容器管理的对象,过滤器的功能是在原数据和目的数据之间起过滤作用的中间组件. 简单实例实现: 过滤器功能:在访问指定资源之前,打印一条日志,访问指定资源之后,打印一条日志 package com.jike.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterCon

(转载)关于JSP和Servlet乱码处理

JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我也是刚学,所以有不足之处希望谅解. 一.表单提交时出现乱码: 在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式.所以请求的时候便有get请求和post请求.以前我一直以为get请求和post请求方式出现的乱码的解决方式是一

JSP与Servlet的关系

http://blog.csdn.net/kaixinbingju/article/details/9409927 Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类. 如图所示,Java提供一系列接口类(所谓接口类就是类中所有方法只提供方法声明,不提供任何的方法实现,这些类的实现就留给后继者去做.):

JSP与Servlet的关系理解

Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类. 如图所示,Java提供一系列接口类(所谓接口类就是类中所有方法只提供方法声明,不提供任何的方法实现,这些类的实现就留给后继者去做.):Servlet.ServletConfig.Serializable,然后通过多重继承产生一个最通用的Servlet

JSP和Servlet的中文乱码处理

JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我也是刚学,所以有不足之处希望谅解. 一.表单提交时出现乱码: 在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式.所以请求的时候便有get请求和post请求.以前我一直以为get请求和post请求方式出现的乱码的解决方式是一

JSP入门:介绍什么是JSP和Servlet(转)

转自:http://developer.51cto.com/art/200907/134506.htm JSP入门:什么是jsp? JSP(Java Server Pages)是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态网页技术标准.在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp). 简单地说,jsp就是可能包含了java程序段的html文件,为了和普通的html

图解JSP与Servlet的关系

Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类. 如图所示,Java提供一系列接口类(所谓接口类就是类中所有方法只提供方法声明,不提供任何的方法实现,这些类的实现就留给后继者去做.):Servlet.ServletConfig.Serializable,然后通过多重继承产生一个最通用的Servlet

Servlet学习(三)Servlet编程实例-网站登录(修改版-增加数据库-附源码)

我们为刚才的那个示例Servlet学习(二)Servlet编程实例-网站登录添加上数据库,组成一个较为完整的登录功能. 在开始之前我们得首先了解下一些常用的java术语: PO(persistant object) 持久对象 在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了. 通常对应数据模型(数据库),本身还有部分业务逻辑的处理. 可以看成是与数据库中的表相映射的java对象. 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合. PO中应该不包含