Web Servlet笔记(一)

简介

在这里插入图片描述

Web工程结构

在这里插入图片描述

实例1

FirstServlet.java

package com.servlet;
 
public class FirstServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 接受请求发来的参数
		String name = request.getParameter("name");
		String html = "<h1 style = ' color red '>hi,"+ name +"!</h1><hr/>";
		PrintWriter out = response.getWriter();//从服务器到浏览器返回的输出流
		System.out.println("返回给浏览器的响应数据为:"+html);
		out.println(html);//将html发回浏览器 
	}	
}

xml:

<?xml version="1.0" encoding="UTF-8"?>
  <display-name>FirstServlet</display-name>
  <welcome-file-list>  ... </welcome-file-list>
  
  <!-- 声明Servlet -->
  <servlet>
    <!-- servlet的别名 -->
    <servlet-name>first</servlet-name>
    <servlet-class>com.servlet.FirstServlet</servlet-class>
  </servlet>
  <!-- 将Servlet与URL绑定 -->
  <!-- http://localhost:8080/FirstServlet/hi?name=XXX            -->
  <servlet-mapping>
  <servlet-name>first</servlet-name>
  <url-pattern>/hi</url-pattern>
  </servlet-mapping>
</web-app>

图解
在这里插入图片描述

浏览器中输入信息,通过请求给TC,TC查看url去xml中匹配,匹配到后查找,再创建FirstServlet对象,执行service方法,提供响应和支持
out后,TC通过响应给浏览器,执行结果。

Servlet开发

步骤:
1.创建Servlet类,继承HttpServlet
2.重写service方法,编写程序代码
3.配置web.xml,绑定URL

Servlet访问方法

  • http://IP地址:端口/context-path/url-mapping
  • 远程访问使用IP地址,本地访问localhost(127.0.0.1)
  • context-path成为“上下文路径”,默认为工程名

实例2

SampleServlet.java

package com.servlet;
 
public class SampleServlet extends HttpServlet {
	public void service(HttpServletRequest request,HttpServletResponse response) throws IOException {
		PrintWriter out = response.getWriter();//向浏览器输出的数据流
		out.println("<a href='http://www.baidu.com'>Baidu</a>");
	}

}


xml:

<servlet>
    <servlet-name>sample</servlet-name>
    <servlet-class>com.servlet.SampleServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>sample</servlet-name>
  <!-- 映射到sample地址上 -->
  <url-pattern>/sample</url-pattern>
  </servlet-mapping>

访问使用:
http://localhost:8080/FirstServlet/sample
http://127.0.0.1:8080/FirstServlet/sample

请求参数

请求参数是指浏览器通过请求向Tomcat提交的数据。通常是用户输入的数据,待Servlet进行处理;
格式:参数名1=值1&参数名2=值2&参数名n=...

表单中action属性

<form action="http://127.0.0.1:8080/FirstServlet/sample" >

Servlet接收请求参数
request.getParameter()–接收单个参数
request.getParameterValues()–接收多个同名参数

Get Post 请求方法

Get方式是将数据通过在URL附加数据显性向服务器发送数据。. http://localhost:8080/FirstServlet/sample?name=zhangsan
Post方式会将数据存放在”请求体”中隐性向服务器发送数据. http://localhost:8080/FirstServlet/sample
·请求体: name=zhangsan
这两个方法比较而言,Get方法可读性更好,Post方法数据更加的隐秘

public class RequestMethodServlet extends HttpServlet{
	 //处理get请求
    public void doGet(HttpServletRequest request , HttpServletResponse response) throws IOException{
        String name = request.getParameter("name");
        response.getWriter().println("<h1 style='color:green'>" + name + "</h1>");
    }
    //处理post请求
    public void doPost(HttpServletRequest request , HttpServletResponse response) throws IOException{
        String name = request.getParameter("name");
        response.getWriter().println("<h1 style='color:red'>" + name + "</h1>");
    }
}
三种方法

service() 对所有请求都无差别处理
Get请求 doGet()
Post请求 doPost()

Get与Post应用场景

Get常用于不包含敏感信息的查询功能
例如:https://www.baidu.com/s?wd=yumao&rsv_ spt=1

Post用于安全性要求较高的功能或者服务器的”写"操作
1.用户登录 2.用户注册 3.更新公司账目

Servlet生命周期

Servlet被服务器实例化后,调用 init () 方法进行初始化,请求到达后调用service() 方法来处理客户端的请求。service方法自动派遣运行与请求对应的doXXX方法,直到服务器决定销毁实例调用 destroy() 方法终止(结束)。

  1. 装载 - web.xml
  2. 创建 - 构造函数
  3. 初始化 - init()
  4. 提供服务 - service()
  5. 销毁 - destroy()
//servlet生命周期,的三个方法,1.被创建,执行且只执行一次init方法,2.提供服务,执行service方法,执行多次 3.被销毁,当Servlet服务器正常关闭时,执行destroy方法,只执行一次。
     
     @Override
     public void init() throws ServletException {
         // TODO Auto-generated method stub
         super.init();
     }
     
     @Override
     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // TODO Auto-generated method stub
         super.service(req, resp);
     }
     
     @Override
     public void destroy() {
         // TODO Auto-generated method stub
         super.destroy();
     }

注释配置Servlet

  • Servlet 3.x之后引入了"注解Annotation" 特性
  • 注解用于简化Web应用程序的配置过程
  • Servlet核心注解: @WebServlet

/*写了注解@WebServlet(映射URL) 之后就不用切换去写web.xml里面的东西了
*因为有了这句话之后,在启动的时候,Tomcat会扫描所有的字节码文件,这个类里面写了@WebServlet并且配置了
* 对应的URL,就会按照这个规则加载进去,其实@WebServlet就像是一个标志,告诉Tomcat当前的类是一个Servlet,
* 要将它绑定到/anno就可以了
*/
@WebServlet("/anno")//即url
public class AnnotationServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("I'm annotationServlet servlet!");
    }
}


JSP

Servlet的缺点
  1. 静态HTML与动态Java代码混合在一起,难以维护
  2. Servlet利用out.println()语句输出,开发效率低下
  3. Eclipse很难在开发过程中发现错误,调试困难

JSP介绍

  • JSP全称是(Java Server Pages),Java服务器
  • JSP是J2EE的功能模块,由Web服务器执行
  • JSP的作用就是降低动态网页开发难度
JSP的运行要求
  • 可正常运行的Tomcat
  • 所有JSP页面扩展名必须是.jsp
  • JSP页面应放在Web应用程序目录下
实例三

在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<table>
			<tr>
				<th>year</th>
			    <th>salary</th>
			</tr>
			<%
				for(int i = 0 ;i<=50; i++){
					out.println("<tr>");
					out.println("<td>" + i + "</td>");
					int sal = 0;
					if(i<=5){
						sal = 1500 + i * 150;
					}else if(i>5 && i<=10){
						sal = 1500 + 150 * 5 + (i-5) * 300;
						
					}else if(i>10){
						sal = 1500 + 150 * 5 + 5 * 300 + (i-10)*375 ;	
					}
				
					out.println("<td>"+sal+"</td>");
					out.println("</tr>");
				}
		
			%>
		</table>
</body>
</html>
JSP的执行过程

在这里插入图片描述

JSP的转译过程

在这里插入图片描述

JSP的基本语法

JSP语法十分简单,按功能可分为以下四种
1.JSP代码块
2.JSP声明构造块
3.JSP输出指令
4.JSP处理指令

JSP代码块

JSP代码块用于在JSP中嵌入Java代码
JSP代码块语法:<%java代码%>
例如:

<%System.out.println("Hello World!");%>
JSP声明构造块

JSP声明构造块用于声明变量或方法
JSP声明构造块语法:<%!声明语句%>
mooc
例如:

<%! public int add(int a,int b){return a+b;} %>
JSP输出指令

JSP输出指令用于在JSP页面中显示java代码执行结果JSP输出指令语法:<%=java代码%>
例如:

<%="<b>" + name +"</b>"%>
JSP常用处理指令

<%@ page %>定义当前JSP页面全局设置
<%@include%>将其他JSP页面与当前JSP页面合并
<%@taglib%>引入JSP标签库

JSP中注释的区别

<%-- 注释 --%>JSP注释,被注释语句不做任何处理
///*… */用于注释<%%>java代码,被注释代码不执行
<!--html-->HTML注释,被注释的语句不会被浏览器解释

实例四

综合训练:质数算法
列出1000内的质数(除1以外,只能被1和自身整除的自然数)
要求1:使用List保存所有有效的质数
要求2:将结果打印到页面,格式为“<h1>X是质数</h1>

<%@page import = "java.util.*,java.text.*" contentType="text/html;charset=utf-8" %>
<%!
boolean isPrime(int num){ //抽象方法 定义写在%!
	boolean flag = true;
	for(int j=2 ; j < num ; j++){
		if(num % j == 0){
			flag = false;
			break;
		}
	}
	return flag;
}
%>
<%
//泛型便于使用 包装对象integer
	List<Integer> primes = new ArrayList();//用指令导入包
	for(int i = 2 ;i<=1000; i++){
		boolean flag = isPrime(i);
		
		if(flag == true){
			//out.println("<h1>"+i+"</h1>");
			primes.add(i);
		}
	}
%>
<%
	
<%
	for(int p : primes){
		//out.println("<h1>"+p+"是质数</h1>");//当为html代码 利用输出语句
%>

	<h1 style = 'color:red'><%=p %>是质数 </h1>
	
<%
	}

%>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值