Java Web标准结构
Servlet生命周期
1.装载-->读取web.xml中的数据
2.创建-->开始FirstServlet的构造方法
3.初始化-->用于初始化这个Servlet,比如预先读取某个文件的内容
4.提供服务-->开始进行此Servlet类的功能
5.销毁-->对资源进行销毁操作
public FirstServlet(){
System.out.println("正在创建FirstServlet...");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("正在初始化FirstServlet...");
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name=request.getParameter("name");
System.out.println("返回给浏览器的内容为:"+name);
response.getWriter().println("<h1>你好! "+name+"</h1>");
}
@Override
public void destroy() {
System.out.println("正在销毁FirstServlet数据中...");
}
使用注解配置Servlet
可以直接用
@WebServlet("/pattern")
将Servlet类指定为一个网页
也可以加入/pattern/* 来实现网页的多态
@WebServlet("/pattern/*")
public class PatternServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String requestURI = req.getRequestURI();// URI:/class/875
String id = requestURI.substring(requestURI.lastIndexOf("/") + 1);
//lastIndexOf给出的是最后一次出现的索引
//substring 输入一个索引位.从索引位开始截取,直到字符串最后
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<h1>");
if (id.equals("100"))
writer.println("李璇");
if (id.equals("200"))
writer.println("聂星宇");
if (id.equals("300"))
writer.println("欢迎回家");
writer.println("<h1>");
}
}
补充:
URL:http://www.baidu.com/index.html
URI:/index.html
请求的结构
1.Get与Post方法,分别对应<form>中的get与post. 表单默认提交方法为get,post需要设置.
2.通过get方式提交的表单,将在网页上显示。 此类表单的数据可以在类中使用doGet方法获取数据
3.通过post方式提交的表单,将在请求体中显示。 此类表单的数据可以在类中使用doPost方法获取数据
<form action="/login" method="post">
<input name="username">
<input name="password" type="password">
<input type="submit" value="提交">
</form>
响应的结构
Servlet乱码问题
request.setCharacterEncoding("utf-8");//确保从其他网页得到输入为utf-8
response.setContentType("text/html;charset=utf-8");//确保向其他网页输出为utf-8
Servlet的请求转发与响应重定向
request.getRequestDispatcher("/index").forward(request,response);//请求转发
response.sendRedirect("/index");//响应重定向-->进入的网页需要同时写get和post
1.请求转发是使用的同一个请求对象,而请求是客户端发往服务器的;
2.响应重定向是使用响应对象进行处理,而响应是服务器发往客户端的。
如果没有响应重定向的话,那么如果需要对服务器发往客户端的数据进行业务拦截(使用过滤器或拦截器),那么在技术上是无法实现的。
3.请求转发通常用来进行跳转时携带数据的,这里的跳转可能是servlet到servlet,也能是其他目标。其根本作用是用来携带数据。
4.响应重定向并不是请求,所以不区分get或者post。
5.请求转发产生的网页跳转只能应用于网页内部的跳转,比如百度跳百度,不能用于百度跳微博。
设置自定义属性
request.setAttribute("name","Li");//属性名,属性值
String name = (String)request.getAttribute("name");//获取属性值
Servlet常用方法
request.getParameter("");//用于接收表单中的单个参数
request.getParameterValues("");//用于接收表单中的多个参数-->checkbox复选项
response.getWriter().println();//用于向浏览器输出HTML页面
request.setCharacterEncoding("utf-8");//确保从其他网页得到输入为utf-8
response.setContentType("text/html;charset=utf-8");//确保向其他网页输出为utf-8
String requestURI = request.getRequestURI();// 得到网页的URI:/pattern/875
requestURI.lastIndexOf("/");//截取网页URI / 符号之后的子字符串
requestURI.substring(1);//截取获得字符串中索引位开始之后的子字符串
request.getRequestDispatcher("/index").forward(request,response);//请求转发
response.sendRedirect("/index");//响应重定向-->进入的网页需要同时写get和post
request.setAttribute("name","Li");//属性名,属性值
String name = (String)request.getAttribute("name");//获取属性值