Servlet入门——1、servlet基础

servlet简介:java服务器小程序,主要用于生成动态web内容。因为web页面基于用户提交数据,web页面数据频繁改变,页面信息来自于数据库,所以我们需要动态创建web页面。

serlvet功能:读取客户端发来的显示信息(表单数据),读取客户端发来的隐式信息(请求头信息),生成相应结果,发送显示xi信息给客户端(html),发送隐式信息给客户端(状态码和请求头信息)。

 Servlet 读取表单数据

Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:

  • getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
  • getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
  • getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。

servlet标注:name是可选属性

@WebServlet(name="MyServlet",urlPatterns={"/my"})

或者 

@WebServlet("/MyServlet")

ServletConfig:从Servlet内部获取到初始参数的值

@WebServlet(name = "ServletConfigDemoServlet",
urlPatterns = { "/servletConfigDemo" },
initParams = {
@WebInitParam(name="admin", value="Harry Taciak"),
@WebInitParam(name="email", value="admin@example.com")
    }
)

@WebServlet(name = "ServletConfigDemoServlet",
urlPatterns = { "/servletConfigDemo" },
initParams = {
@WebInitParam(name="admin", value="Harry Taciak"),
@WebInitParam(name="email", value="admin@example.com")
    }
)

servlet中最常用的方法:getParameter是在ServletRequest中最常用的方法。该方法通常用于返回HTML表单域的值,也可以用于获取查询字符串的值,用下面这个语句,可以通过Servlet内部获取id值。

String id = request.getParameter("id");

默认情况下,PrintWriter对象使用ISO-8859-1编码。 

提交表单两种常用方法:

get:将请求参数显示在url中,调用servlet的doGet方法,不安全

post:不在url中显示请求信息,调用servlet的doPostt方法,安全

Servlet生命周期:加载实例化Servlet(创建一个servelt实例)——调用init()方法(仅调用一次)——调用service方法(doPost或者doGet,调用多次,每次请求调用)——调用destroy方法(销毁servlet,tomcat关闭执行)

页面导航3种方式:

1、请求重定向:工程之外,不共享request里面的数据

resp.sendRedirect("http://www.baidu.com");

2、请求转发:设置了共享变量,变量不会传到新页面。比如两个servlet分别设置共享变量“你好”,“你也好”,请求转发到页面只能输出其中一个变量

req.getRequestDispatcher("/Success.html").forward(req, resp);

3、请求包含:包含success页面,如果设置了共享变量,变量会传到新页面输出。比如两个servlet分别设置共享变量“你好”,“你也好”,请求转发到页面两个变量都能输出

req.getRequestDispatcher("/Success.html").include(req, resp);

setvlet3个作用域 :

ServletContext:范围最大,应用程序级别,整个应用程序都能访问

HttpSession:范围次之,会话级别,在当前浏览器中能访问

HttpServletRequest:范围最小,请求级别,请求结束,变量作用域也结束

//请求结束作用域结束
req.setAttribute("R_name", "R_value");
//会话 客户端和服务器断开作用域结束
HttpSession session = req.getSession();
session.setAttribute("S_name", "S_value");
//全局  所有用户共享
ServletContext cxt = this.getServletContext();
cxt.setAttribute("SC_name", "SC_value");

 下面写个例子,通过servlet实现页面输出,项目结构图如下

HelloServlet代码

package com.servlet;

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

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

public class HelloServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String url = request.getRequestURI().toString();
		System.out.println(url);//打印路径
		//打印输出流
		PrintWriter out = response.getWriter();
		out.print("hello servlet");
	}

}

html页面,submit,button,a标签都实现了跳转输出

<!DOCTYPE html>
<html>
  <head>
    <title>helloServlet.html</title>
	<script type="text/javascript">
		function test(){
			var f = document.forms[0];
			f.action="servlet/HelloServlet"
			f.submit();
		}
	</script>
  </head>
  <form action="servlet/HelloServlet">
  	<input type="submit">
  	<!-- button没有提交功能   onclick动作事件调用test() -->
  	<input type="button" onclick="test();" value="hello">
  </form>
  <hr>
  <a href="servlet/HelloServlet">link</a>
  <body>
  </body>
</html>

下面这个是个生命周期小例子,项目结构图如下

html页面代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>             <!-- method有post或者get -->
<form action="servlet/BasicServlet" method="post">
  <table>
    <tr>
      <td>Name</td>
      <td><input type="text" name="name"></td>
    </tr>
    <tr>
      <td>Password</td>
      <td><input type="Password" name="password"></td>
    </tr>
    <tr>
      <td colspan="2" align="center"><input type="submit"></td>
    </tr>
  </table>
</form>
</body>
</html>

servlet代码

package com.basic;

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

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

public class BasicServlet extends HttpServlet {

	//构造方法
	public BasicServlet() {
		System.out.println("BasicServlet");
	}

	/*//service里判断是doget方法还是都post方法,会覆盖dopost和doget
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		super.service(arg0, arg1);
	}*/
	
	public void destroy() {
		System.out.println("destroy");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		PrintWriter out = response.getWriter();
		out.println("include");
		String name = request.getParameter("name");
		if(name!=null&&name.equals("kaite")){
			request.getRequestDispatcher("/index.jsp").forward(request, response);
		}else{
			response.sendRedirect("http://www.baidu.com");
		}
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			PrintWriter out = response.getWriter();
			out.println("include");		
			String password = request.getParameter("password");
			if(password!=null&&password.equals("qaqa")){
				//请求包含
				request.getRequestDispatcher("/BasicService.html").include(request, response);
			}else{
				request.getRequestDispatcher("/index.jsp").forward(request, response);
			}
	}

	//初始化一个方法
	public void init() throws ServletException {
			// 从配置文件里读取全局参数                 最大作用域
			String bigname = this.getServletContext().getInitParameter("context");
			System.out.println(bigname);
			//从配置文件里读取局部参数
			String name = this.getInitParameter("name");
			System.out.println(name);
			System.out.println("init");
	}

}

 配置文件里配置了一个全局变量和一个局部变量

<servlet>
    <servlet-name>BasicServlet</servlet-name>
    <servlet-class>com.basic.BasicServlet</servlet-class>
    <init-param>
    	<param-name>name</param-name>
    	<param-value>anwser</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>BasicServlet</servlet-name>
    <url-pattern>/servlet/BasicServlet</url-pattern>
  </servlet-mapping>	

控制台输出

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值