Init和destroy只被调用一次,service可被调用多次,属于不同的线程
获取配置文件中的参数:
ServletConfig 用于获取在xml文件中设置的常数值
法一:有参的初始化方法
Public void init(ServletConfig config) throws ServletException{
Print(“init”);
System.out.println(“init-param:”+config.getInitParameter);
}
法二:无参的初始化方法
Public void init() throws ServletException{
Print(“init”);
String test = getInitParameter(“test”);
System.out.println(“init-param:”+test);
}
事件能获取那些内容?
<listener>
<listener-class>com.iotek.jee.listener.WebContextListener</listener-class>
</listener>
com.iotek.jee.listener包名
WebContextListener实现了ServletContextListener接口的类名
-
所有的Servlet都有,且只有一个 getServletContext()方法,Servlet的所有组件都可以访问它
可用于获取全局的变量
-
getServletContext()方法 写在 service方法中
getContextPath()获取的是 工程名
getQueryString() 用于get请求
获取请求页面后面的字符串参数name=admin&password=123456
如:localhost:8080/WebServlet/index.jsp?name=admin&password=123456
在客户端可以用 ajax、表单、超链接 提交用户的数据请求信息
超链接 是小型的表单 是get提交方法
由客户端引起的错误 服务器发现客户请求的资源是不存在的
req.setCharacterEncoding(“UTF-8”):只适合post请求方式 避免客户端输入含有中文的超链接的参数值时 在服务器端出现乱码 对get请求方式无效
Get方式默认的字符编码为 ISO8859-1
表单默认是get请求
action指定由该表单有那个servlet处理
resp.getWriter().write(“name:”+name+”,age:”+age);在客户端的浏览器输出信息
代码提示:Alt+/
index.jsp的代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form method="post" action="prossesing">
姓名:<input name="name"/><br/><br/>
年龄:<input name="age"/><br/><br/>
上传:<input type="file" name="file"/><br/><br/>
<input type="reset" name="reset" value="取消"/><br/><br/>
<input type="submit" name="submit" value="提交"/><br/><br/>
</form>
</body>
</html>
Servlet类的代码如下:
package com.iotek.jee.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 ProssesingServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8"); //解决中文乱码的步骤1
String name = req.getParameter("name");
String age = req.getParameter("age");
resp.setContentType("text/html;charset=UTF-8"); //解决中文乱码的步骤2
resp.getWriter().write("name:"+name+",age:"+age);
}
}
<form method="post" action="prossesing" enctype="multipart/form-data">
姓名:<input name="name"/><br/><br/>
年龄:<input name="age"/><br/><br/>
上传:<input type="file" name="file"/><br/><br/>
<input type="reset" name="reset" value="取消"/>
<input type="submit" name="submit" value="提交"/><br/><br/>
</form>
表单含有enctype="multipart/form-data"属性的 需要在web.xml中配置如上图片的代码
Web.xml的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.iotek.jee.listener.WebContextListener</listener-class>
</listener>
<servlet>
<servlet-name>Prossesing</servlet-name>
<servlet-class>com.iotek.jee.servlet.ProssesingServlet</servlet-class>
<multipart-config>
<max-file-size>51200</max-file-size>
<max-requst-size>52224</max-requst-size>
<max-size-threshold>4096</max-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>Prossesing</servlet-name>
<url-pattern>/prossesing</url-pattern>
</servlet-mapping>
</web-app>
获取表单中某个元素的文件名 的方法
forword方法:
假设有两个servlet ,分别是servlet1和servlet2,servlet1把请求对象和响应对象传递给servlet2,则servlet1中的响应输出流会无效
include方法:
状态码以3开头的,比如303,表示重定向
理解 请求转发与重定向 各自的工作流程 与 区别
WebContent下自定义的文件夹和文件 如:pages和index.html可以被用户访问,其他的如META-INF和WEB-INF目录则用户不能直接访问,WEB-INF只有servlet容器才可以访问
URL重写 需要再看一遍
过滤器的执行顺序 -> 在学习一遍 过滤器-2
作用域范围:Request < Session < Webcontext
内存消耗:Request < Session < Webconte
优先选择:1、Request 2、Session 3、Webcontext
jsp页面编译后会生成.java文件和.class文件 ,其中
Jsp页面中的小脚本和表达式是放在service方法中,所以小脚本和表达式只能声明变量不能声明方法。由于service方法是被所有线程共享的,所以在<%! %>中尽量只声明方法而不声明变量,因为如果声明了变量,那么这个变量就是全局的,当被多个线程同时访问时,会发生冲突
Jsp出现的原因:是避免使用servlet输出页面,即避免在servlet中还要使用标签对
使用指令去包含一个页面的时候,他们生成的是同一个Java源文件
当页面的动作指令设置了参数,则被包含页面就可以使用request对象的getParameter方法获取该页面的参数
要注意区别
JSP脚本包括3中:声明、小脚本、表达式 在Java类中所在的位置
注意:
JSTL标准标签库
EL表达式可以调用作用域对象的属性,但不能调用作用域对象的方法
获取用户通过表单或超链接传递的参数值
<function-signature>是方法签名的意思
JSTL是页面上的小脚本转换成相应的标签库,有利于美工的工作
Remove默认是把所有作用域(page \request\session \application )的指定名称的对象都移除掉
-
表达式访问页面里定义的变量是比较方便的;
-
EL表达式访问定义在作用域对象里的变量是比较方便的。
<c:redirect .../>与<c:import .../>标签不能同时出现,会报错
在线书店 ->采用MVC的目录结构
common存放我们写的一些工具
首页
图书信息
登录、注册
提交订单
订单管理
用户管理
在Tomcat页面配置数据源
访问Tomcat的网址http://tomcat.apache.org/