当前位置: 首页 > news >正文

Java Web工程(不使用Spring框架)

一.创建一个JavaWeb工程

a.新建一个Project项目

b.变成一个web工程

如果右键没有该选项,参考博文:解决无add framework support

c.如果想把其当web运行,需要与tomcat(web服务器)联系起来

二.第一个Servlet程序

a.要完成实现一个Servlet程序,需要先导包(javax在jdk中没有)

工程点击右键->open module settings->libraries->+->Java->找到tomcat中lib路径

地址路径:D:\program files\apache-tomcat-8.5.35\lib

接下来就可以开始写程序了

1.实现Servlet接口

//此时需要implements Servlet这个接口
public class MyFirstServlet implements Servlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

此时我想把响应打在对应的网页上就在Service中写,就写以下逻辑

    //真正处理请求的方法@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {//用户的请求会被封装到 ServletRequest对象中//响应结果会被封装到ServletResponse对象中//如果我想输出,直接用sout只会在控制台显示,想在用户端需要输出,需要用ServletResponse对象servletResponse.setContentType("text/html") ;//可以不写,代表我以网页的形式输出PrintWriter writer = servletResponse.getWriter();//返回的是IO流中的字符输出流writer.println("<html><head></head><body>hello Servlet</body></html>");writer.close();}

此时容器不知道我们写了这个东西,需要url让别人请求你这个资源,我才能进行相应

所以我们需要在web->web-inf->web.xml下写一个配置

<web-app .....><servlet><servlet-name>MyFirstServlet</servlet-name><!--取一个名字,随便取--><servlet-class>ch02.demo.MyFirstServlet</servlet-class><!--对应着我项目中的这个类--></servlet><servlet-mapping><!--将这个servlet映射到这个url--><servlet-name>MyFirstServlet</servlet-name><!--对应着上面取的名字--><url-pattern>/myfirst</url-pattern></servlet-mapping>
</web-app>

以上的xml配置也可以用在类上面的注解实现

@WebServlet(name = "MyFirstServlet",urlPatterns = "/myFirstServlet")
public class MyFirstServlet implements Servlet {}

2.继承HttpServlet类

因为Servlet接口不只是提供Web的接口,因此我们可以使用它的子HttpServlet来代替它

public class MySecondServlet extends HttpServlet {//一个是为了处理get请求,一个处理post请求@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {PrintWriter writer = resp.getWriter();//返回的是IO流中的字符输出流writer.println("<html><head></head><body>hello Servlet</body></html>");writer.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

配置文件

    <servlet><servlet-name>MySecondServlet</servlet-name><servlet-class>ch02.demo.MySecondServlet</servlet-class></servlet><servlet-mapping><servlet-name>MySecondServlet</servlet-name><url-pattern>/mysecond</url-pattern></servlet-mapping>

三.使用Servlet完成用户登录

a.创建一个用户登陆的html界面和登录成功的html

<html lang="en">
<head><!--登录界面--><meta charset="UTF-8"><title>用户登录</title>
</head>
<body>
<div align="center"><h1>用户登录</h1><form action="../login" method="post"><!--action与下面xml的url对应,要../是因为我的网页是写在ch02下,所以得跳上一级到web-->用户名:<input type="text" name="username"></br>密码:<input type="password" name="password"></br><input type="submit" value="登录"></input></form></div></body>
</html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录成功</title>
</head>
<body>
<h1>Success</h1>
</body>
</html>

b.创建Servlet

public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}//当表单点击登录,都会默认以doPost方式提交@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取用户输入的用户名String username = req.getParameter("username");//需要与表单的name属性一致String password = req.getParameter("password");if(username.equals("admin")&& password.equals("123")){resp.sendRedirect("cho2/success.html");//跳转到指定页面}else{resp.sendRedirect("cho2/login.html");}}
}

c.配置文件中进行映射

   <servlet><servlet-name>LoginServlet</servlet-name><servlet-class>ch02.demo.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern><!--需要与html中的action对应--></servlet-mapping>

思考:

  • 如果用户直接打开success.html会怎么样?
  • 如何在用户名错误的情况下回到登录页面并显示错误信息?
  • 如何在登录成功的情况下在success.html中显示用户的信息?

四.会话跟踪

1.Cookie

用户信息保存到客户端,不安全

public class LoginServlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}//当表单点击登录,都会默认以doPost方式提交@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");if(username.equals("admin")&& password.equals("123")){//创建cookie对象,把用户名保存到cookie中加到响应里Cookie cookie = new Cookie("username","admin");resp.addCookie( cookie);//把cookie加到响应中//resp.sendRedirect("ch03/success.html");//跳转到指定页面resp.sendRedirect("success");}else{resp.sendRedirect("ch03/login.html");}}
}
public class SuccessServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//拿取cookieCookie[] cookies = req.getCookies();boolean flag = false;for(Cookie cookie:cookies){if(cookie.getName().equals("username")&&cookie.getValue().equals("admin")){flag = true;break;}}resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();if(flag){out.print("<html lang=\"en\">\n" +"<head>\n" +"    <meta charset=\"UTF-8\">\n" +"    <title>登录成功</title>\n" +"</head>\n" +"<body>\n" +"<h1>Success</h1>\n" +"</body>\n" +"</html>");}}
}
<!DOCTYPE html>
<html lang="en">
<head><!--登录界面--><meta charset="UTF-8"><title>用户登录</title>
</head>
<body>
<div align="center"><h1>用户登录</h1><form action="../login1" method="post">用户名:<input type="text" name="username"></br>密码:<input type="password" name="password"></br><input type="submit" value="登录"></input></form></div></body>
</html>
    <servlet><servlet-name>LoginServlet1</servlet-name><servlet-class>ch03.LoginServlet1</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet1</servlet-name><url-pattern>/login1</url-pattern></servlet-mapping><servlet><servlet-name>SuccessServlet</servlet-name><servlet-class>ch03.SuccessServlet</servlet-class></servlet><servlet-mapping><servlet-name>SuccessServlet</servlet-name><url-pattern>/success</url-pattern></servlet-mapping>

2.HttpSession

它是所有会话跟踪技术中最安全和最常用的技术

public class LoginServlet1 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");if(username.equals("admin")&& password.equals("123")){
//            //创建cookie对象,把用户名保存到cookie中加到响应里
//            Cookie cookie = new Cookie("username","admin");
//            resp.addCookie( cookie);//把cookie加到响应中HttpSession session = req.getSession();//创建session对象session.setAttribute("username","admin");//保存用户名到session中resp.sendRedirect("success");}else{resp.sendRedirect("ch03/login.html");}}
}
public class SuccessServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        //拿取cookie
//        Cookie[] cookies = req.getCookies();
//        boolean flag = false;
//        for(Cookie cookie:cookies){
//            if(cookie.getName().equals("username")&&cookie.getValue().equals("admin")){
//                flag = true;
//                break;
//            }
//        }HttpSession session = req.getSession();//拿到同一个 sessionString username = (String)session.getAttribute("username");resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();if(username!=null&&username.equals("admin")){out.print("<html lang=\"en\">\n" +"<head>\n" +"    <meta charset=\"UTF-8\">\n" +"    <title>登录成功</title>\n" +"</head>\n" +"<body>\n" +"<h1>Success</h1>\n" +"</body>\n" +"</html>");}}
}

五.Web开发模式MVC

示例:

jsp放在WEB-INF目录下,让用户不能直接访问

/*POJO: Plain Old Java Object仅用于封装数据*/
public class User {private String name;private String password;public User() {}public User(String name, String password) {this.name = name;this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", password='" + password + '\'' +'}';}
}
/*Service:BusinessBean业务逻辑Bean,完成业务逻辑功能*/
public class UserService {private String msg;public boolean login(User user){if(user.getName().length()>8){this.msg = "用户名长度不能超过8位";return false;}if(user.getPassword().length()>16){this.msg = "密码长度不能超过16位";return false;}.................return false;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}
}

http://www.dtcms.com/a/419539.html

相关文章:

  • Java:类和对象(二)
  • pytorch入门学习
  • AMD KFD的BO设计分析系列5-1:kgd_mem 实现详解
  • 大模型-Layer Normalization
  • 内存PE加载器:一种绕过EDR检测的无文件攻击技术
  • 做电商网站报价域名网站排名
  • 网站项目需要什么简洁大方网站建设
  • VideoMimic复现(1):环境搭建(real2sim+simulation)
  • 关于STM32单片机编程中大量使用全局变量而非使用函数调用的一些思考
  • pc端网站开发房地产网
  • nginx中root和alias
  • JMeter 执行流程
  • 网站开发设计与实现云南楚雄网
  • Go 语言中映射(Map)使用场景
  • Go 中实现“面向对象”
  • 富阳做网站广州专业做网站多少钱
  • 威海网站开发公司电话手机软件怎么做出来的
  • 企业系统有哪些南通网站流量优化
  • nginx 的root跟alias的区别
  • 到底什么是智能网联汽车??第三期——汽车总线及车载网络系统
  • 网站做跳转影响排名吗wordpress在线考试插件
  • 网站开发行业推广网站开发合同是否专属管辖
  • 网站建设招聘启事太原城市建设招标网站
  • 做淘宝客为什么要做网站wordpress中文清爽博客主题:jishuzh主题分享
  • Vue表格多选后,将勾选数据返现到弹框中列表,部分数据出现丢失情况
  • CKAD-CN 考试知识点分享(16) 修改 container 名称
  • 东营优化网站中国石油大学网页设计与网站建设
  • 机器视觉:基于MTCNN与Caffe模型的人脸性别年龄统计系统实现
  • 手机网站开发升上去专门做消防器材的网站
  • Docker进程中的守护进程原理解析