jsp2
D:\Software\Tomcat7\work\Catalina\localhost 是缓存目录,可以删掉
隐藏域:页面表单中的一个元素,跟文本框一样,但是用户看不到
1.建立test1--form表单
需要它,而不需要用户看到,用隐藏域
<body>
<%=request.getParameter("haha")%>
<form action="" method="post">
<input type="text" name="haha" />
<!-- 隐藏域 -->
<input type="hidden" name="xixi" value="maoyun" />
<input type="submit" />
</form>
</body>
JSP一共有九大内置对象:
out
request
response
session
application
另外四个用的不多
指令:
<%@page %>
<%@include file='test1.jsp' %> include 指令(静态include)
test2.jsp
<body>
222222222222222222222222222222
<%
int num = 100;
%>
<%@include file="test3.jsp" %>
</body>
test3.jsp
body放入
33333333333333
删除第一行的其他,进入淘宝的,看导航
动作:
<jsp:forward>
<jsp:include> include 动作(动态include)
建立test4
<body>
444444444444444444444444444444
<jsp:include page="test5.jsp">
//<jsp:param value="maoyun" name="username"/>
</jsp:include>
</body>
建立test5
555555555555555555555555555
//<%=request.getParameter("username")%>
面试最容易问相近的东西
首先,这个两个include从表现的结果形式上没有任何区别
剖析jsp的原理
将jsp变成一个servlet,遇到java代码,就去掉标签原封不动,如果遇到html代码,就用out.write给它打出来
每一jsp背后都有一个servlet
新建test6.jsp
<div>aaaa</div>
<%
System.out.print("xxxx");
%>
</body>
到tomcat文件夹里去看看
test6啥时候生成,重启tomcat--访问网址--打开文件夹有test6_jsp--打开它--_jspInit(){}(初始化)--_jspDestroy--_jspService(Servlet开始也有,分化成两个)--猜出类像HttpServlet--其里面有session,out 九大内置对象--try---继续往下走--out.write--写的html--java代码
servlet是jsp的底层,jsp的声明???
这段内容吃饭的,很重要
java代码里不能定义方法,原因在方法里不能声明方法
通过声明定义方法--类里可以定义方法
test6.jsp<%!
public void haha()
{
}
%>
test6_jsp在方法里找到代码 和其他方法平级
静态includ动态includ区别 test3没有了
查看test2_jsp.java合并一个 查看test4_jsp.java 把test5丢过去,其他自己查查
静态的,直接合一起,动态运行的时候合一起
动态includ可以传参数
test4里加参数
<body>
444444444444444444444444444444
<jsp:include page="test5.jsp">
//<jsp:param value="maoyun" name="username"/>
</jsp:include>
</body>
静态不用传参数, 动态测试下
test5接收一下
555555555555555555555555555
//<%=request.getParameter("username")%>
静态里共享参数,test2 <%
int num = 100;
%>
test3里打印 3333333333333333333333333333
<%=num%> 此时不管报错直接用 --->查看test2_jsp.java
公司开始穷的时候买空间 jsp不需要重启tomcat
下课练习out.print和out.write区别?
新建test7 注释test3的num
<body>
<%
out.print("haha");
out.write("haha");
%>
</body>
out.print 所打印的内容转化为字符串打印到页面上
out.write 将原有的内容打印出来
<body>
<%
out.print(100);
out.write(100);//打印整数的asc码
%>
</body>
<body>
<%
Object o = null
out.print(o);
out.write(100);//打印整数的asc码
%>
</body>
servlet自启动
建立一个包:com.qingmai.web--建立一个类WebStart
删掉maping
<servlet>
<servlet-name>WebStart</servlet-name>
<servlet-class>com.mao.WebStart</servlet-class>
<init-param>//4加参数,下面代码->怎么调用呢->init()里,跟配置有关系String username = this.getServletConfig().getInitParam("username")->打印出来->好处?数据库的连接信息,客户不能能改四大金刚,sqlService数据库名字,会自启动就可以了,后面框架会解决
<param-name>username</param-name>
<param-value>damao</param-value>
</init-param>
<load-on-startup>1</load-on-startup>//1放在最后
</servlet>
2初始化的时候加上输出
public void init() throws ServletException {
// Put your code here
System.out.println("网站启动了");
//String username = this.getServletConfig().getInitParameter("username");
//System.out.println(username);
}
3然后部署一下就可以了
过滤器(Filter):
如果在web项目中,建立了一个过滤器,那么每次访问web中的servlet的之前时候,就会自动调用该过滤器中的代码
每次设置编码--修改编码
建立过滤器->建立类CodeFilter 想成为过滤器怎么办?实现一个接口Filter--> 代码写在doFilter 输出过滤器“过滤器被执行了”-->配置过滤器文件xml
-<filter>
<filter-name>codeFilter</filter-name>
<filter-class>com.mao.CodeFilter</filter-class>
</filter>
-<filter-mapping>
<filter-name>codeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
启动tomcat不启动过滤器-->访问test7-->啥都没有,标签也没有了
--->
当过滤器过滤信息之后,会停止后面要运行的内容
-->网页要出来哈->doFilter(父类对象 参数FilterChain->)
FilterChain : 过滤器链
系统不知道后面还有没有过滤器
->在doFileter里使用
//调用过滤器链:如果后面有过滤器,就会执行后面的过滤,
//如果没有,就会继续执行网站后面的内容
arg2.doFilter(arg0, arg1);//净水层,没有了要排除来水
--->系统如何知道过滤器的顺序?顺序在哪里?
根据xml里先后顺序
编码调一下,在doFileter里加上 arg0.setCharacterEncoding("UTF-8");
--->测试test1 访问网页时候会执行过滤器 还可以写响应编码,jsp响应编码在coding里,先过滤器,后网页 访问一次网页,执行一次过滤器-->
url重写
--> Servlet显示单个用户如何写
showSingleUser.do?id=5 wumao
-->建立一个servlet showSingleUser /*
留个doget 输出“触发了”
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//测试ip request.getLocalAddr();
后加//String str1 = request.getPathInfo();
//System.out.println(str1.substring(1));
System.out.println("触发了");
}
此时访问所有的网页都会触发
访问加上/user/* 带有user会访问-->上面注释的内容 截取字符串
做门户网站,都会写url形式 带有尾巴的不好看
作业类似亿流网络
user/sanmao