首页 > 代码库 > web学习笔记
web学习笔记
tomcat
bin
startup启动服务器
shutdown关闭服务器
conf(配置文件夹)
server.xml
服务器配置文件(端口号)
web.xml
lib(架包)
logs(日志)
temp(临时文件)
webapps(写好的代码,部署的项目)
work(放jsp)
servlet(java代码) )
javac -d . -cp servlet-api.jar FirstServlet.java
手动部署
1.文件夹下新建WEB-INF,下建立classes(放java字节码文件)和lib(jar包)文件将配置好的web.xml放到web-inf 文件夹下
2.将上述文件放到tomcat下的webapps文件夹下
3.http://ip:port/项目名/资源名
http://127.0.0.1:8181/tylg_servlet/FirstServlet
重新部署
servlet
实现servlet接口
<servlet>
<servlet-name>firstservlt</servlet-name>//用来匹配servlet—mapping
<servlet-class>com.briup.web.servlet.FirstServlet</servlet-class>java类的包名加类名
</servlet>
<servlet-mapping>
<servlet-name>firstservlt</servlet-name>//用来匹配servlet
<url-pattern>/firstServlet</url-pattern>//资源路径
</servlet-mapping>
响应过程
http://ip:port/项目名/资源名
http://127.0.0.1:8181/tylg_servlet/FirstServlet
服务器得到get请求,通过ip和端口号找到tomcat,在tomcat中找到webapps,如果是页面,直接访问如果是java在web-inf中找到web.xml。在xml里通过路径的资源名和url-pattern匹配找到servlet-mapping,在servlet-mapping中通过servlet-name匹配servlet标签,通过servlet-class找到对应的java运行文件
继承Genericservlet
实现service方法(自动调用)
http://127.0.0.1:8181/tylg_servlet/SecondServlet
继承HttpServlet
service(HttpServlet req,HttpServletResponse resp)仅拦截http协议的请求
service(ServletRequest arg0, ServletResponse arg1)所有请求都会拦截
init(初始化)destroy(消亡)
第一次访问的时候创建对象(init方法)(tomcat的service容器)并调用servlet方法,第二次再发请求时不创建新对象,使用第一次启动的时创建的对象,调用servlet方法(单例模式)当服务器停掉的时候调用destro有方法回收对象
在web.xml里的servlet标签加<load-on-startup>1</load-on-startup>可以设置是否在服务器启动时创建对象
数字越接近0越早创建,负数则不创建
单例模式
class Test{//懒汉模式判断是否存在,不存在创建新对象
private Test test;
private Test(){}
public Test getTest(){
if(test!=null){
test=new Test();
}
return test;
}
}
class Test{//饿汉模式先创建对象
private Test test=new Test();
private Test(){}
public Test getTest(){
return test;
}
}
webcontent下方html页面
天生多线程,线程不安全
为服务器设置重新加载servers -》context.xml-》<context reloadable="true">
get/post传参方式(key=value)
get(将参数用地址的方式传递)getParameter
不安全,有长度限制
doGet
超链接,form表单,ajax
http://127.0.0.1:8181/tylg_servlet/param.html
当发一个请求,资源存在,将请求封装成httprequest对象(web服务器)作为参数发送给service方法
http://127.0.0.1:8181/tylg_servlet/param.html
http://127.0.0.1:8181/tylg_servlet/ParamServlet?name=zhang3&age=10
post参数在请求头
form表单methed属性设置为post
doPost只接受post传参
解决乱码
server.xml 修改端口号的地方URIEncoding="编码方式"
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");设置内容类型
发送请求的方式(五种)
http://127.0.0.1:8181/tylg_servlet/register.html
跳转:
服务器内部跳转
RequestDispatcher rdis=req.getRequestDispatcher("error.html");
rdis.forward(req, resp);//传递请求
forward仅跳转
req.getRequestDispatcher("success.html").include(req, resp);
include将其他的东西包含进页面一起显示
浏览器请求(form的active)-》1.java(req.getRequestDispatcher("2").include(req, resp);)->web.xml->2.java->浏览器
一个请求一个回应
浏览器发一个请求,请求在服务器内传递(向下转发),完成后向浏览器发一个响应
客户端重定向
新的请求
resp.sendRedirect("error.html");
路径问题
相对路径
./回到上一级目录
../回到上两级目录
绝对路径
/
范围
application page
ServletContext app= session.getServletContext();
session
HttpSession session =req.getSession();
session会话(每个浏览器jsessionid标识)保存在服务器端的一个对象,客户端没有,浏览器以Cookie的形式将jsessionid发送到服务器,以验证会话的一致性
在web配置
<session-config>
<session-timeout>1</session-timeout>
</session-config>
修改会话保存时间
cookie(自动登陆)会话追踪客户端(本地文件)和服务器端(java对象)都有
request
url重写
将JsessionId以post或get方式发给服务器
过滤器
implements Filter
判定合法性
<filter>
<filter-name>firstfilter</filter-name>
<filter-class>com.briup.web.filter.FirstFilterTest</filter-class>
</filter>
<filter-mapping>
<filter-name>firstfilter</filter-name>
<url-pattern>/*(所有请求都会过滤)</url-pattern>地址中出现的路径才会被过滤器过滤
</filter-mapping>
监听器当事件触发时调用监听器
<listener>
<listener-class>com.briup.web.listener.SessionListener</listener-class>
</listener>
web学习笔记